try:
content = open("/tmp/out").read()
except:
content = ""
我可以比这更短或更优雅吗?我必须对多个文件执行此操作,因此我想要更短的文件。
编写函数是唯一更短的方法吗?
我真正想要的是这个,但如果有任何异常,我想连接 ""
lines = (open("/var/log/log.1").read() + open("/var/log/log").read()).split("\n")
最佳答案
是的,你必须写一些类似的东西
def get_contents(filename):
try:
with open(filename) as f:
return f.read()
except EnvironmentError:
return ''
lines = (get_contents('/var/log/log.1')
+ get_contents('/var/log/log')).split('\n')
NlightNFotis 提出了一个有效的观点,如果文件很大,您不想这样做。也许您会编写一个接受文件名列表的行生成器:
def get_lines(filenames):
for fname in filenames:
try:
with open(fname) as f:
for line in f:
yield line
except EnvironmentError:
continue
...
for line in get_lines(["/var/log/log.1", "/var/log/log"]):
do_stuff(line)
另一种方法是使用标准的 fileinput.FileInput
类(感谢 J.F. Sebastian):
import fileinput
def eat_errors(f, mode):
try:
return open(f, mode)
except IOError:
return open(os.devnull)
for line in fileinput.FileInput(["/var/log/log.1", "/var/log/log"], openhook=eat_errors):
do_stuff(line)
关于python - 读取文件的文件内容并在发生异常时设置为空字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672178/