如何在Python中读取整个文件?在命令行中普遍工作

Col*_*nic 2 python beautifulsoup

如何在Python中读取整个文件?我希望我的脚本可以运行,但它被调用

  • script.py log.txt
  • script.py < log2.txt
  • python script.py < log2.txt
  • python -i script.py logs/yesterday.txt

你明白了.


我试过了

import fileinput
from bs4 import BeautifulSoup
f = fileinput.input()
soup = BeautifulSoup(f.read())
Run Code Online (Sandbox Code Playgroud)

但我明白了

Traceback (most recent call last):
  File "visual-studio-extension-load-times.py", line 5, in <module>
    soup = BeautifulSoup(f.read())
AttributeError: FileInput instance has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)

Tor*_*xed 5

f = open('file.txt', 'r')
data = f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)

更进一步,打开从命令行传递的文件,你可以做到:(另外,这是一种更智能的打开文件的方式,而不是f = open(...)你可以做到的with ...)

import sys
with open(sys.argv[1], 'r') as f:
    data = f.read()
Run Code Online (Sandbox Code Playgroud)

with作为一种更智能的方式打开文件的原因是因为它会在您离开缩进with块后自动关闭文件.这意味着您不必"担心"文件被打开或忘记了很长时间(这可能导致您的操作系统"打开很多文件句柄")


然后到 sys.argv

sys.argv[1]将是你的python文件后命令行上的第一个参数.
sys.argv[0]将是您的脚本名称.例如:

python myscript.py heeyooo 将会:

  • sys.argv[0] == "myscript.py"
  • sys.argv[1] == "heeyooo" :)

然后有各种各样的模块,在处理文件时会对你感兴趣.
其一,os.path是一个良好的开端,因为你很可能需要做尽可能多的跨平台地,这给你转换选项\/在Linux上,反之亦然.一些好的是:

  • os.path.abspath则
  • os.path.isfile
  • os.path.isdir

你也有os.getcwd()可能是好的:)


Mar*_*ers 5

而不是使用fileinput,直接打开文件:

import sys
try:
    fileobj = open(sys.argv[1], 'r')
except IndexError:
    fileobj = sys.stdin

with fileobj:
    data = fileobj.read()
Run Code Online (Sandbox Code Playgroud)