检查gzip或纯文本并在不检查扩展名的情况下读取文件-python
我有一些文件,它们在读取时的格式完全相同,但唯一的区别是我不确定其中的一些文件是否是检查gzip或纯文本并在不检查扩展名的情况下读取文件-python,python,file-io,compression,gzip,Python,File Io,Compression,Gzip,我有一些文件,它们在读取时的格式完全相同,但唯一的区别是我不确定其中的一些文件是否是gzip 示例文件如下所示: der ||| the ||| 0.3 ||| ||| das ||| the ||| 0.4 ||| ||| das ||| it ||| 0.1 ||| ||| das ||| this ||| 0.1 ||| ||| die ||| the ||| 0.3 ||| ||| 当我读到它的时候,我正在做这件事: try: with gzip.open(phr
gzip
示例文件如下所示:
der ||| the ||| 0.3 ||| |||
das ||| the ||| 0.4 ||| |||
das ||| it ||| 0.1 ||| |||
das ||| this ||| 0.1 ||| |||
die ||| the ||| 0.3 ||| |||
当我读到它的时候,我正在做这件事:
try:
with gzip.open(phrasetablefile, 'rb') as fin:
for line in fin:
# do something
except:
with open(phrasetablefile, 'rb') as fin:
for line in fin:
# do something
有没有其他方法可以在不重复代码的情况下执行此操作?(请注意#do something是一段相当长的代码)
有没有办法做到以下几点?
try:
with gzip.open(phrasetablefile, 'rb') as fin:
except:
with open(phrasetablefile, 'rb') as fin:
for line in fin:
# do something
警告:未测试的代码 要么这样做(正如@jornsharpe所建议的): 或者试试这样:
try:
fin = gzip.open(phrasetablefile, 'rb')
except:
fin = open(phrasetablefile, 'rb')
for line in fin:
pass # do something
fin.close()
如果你有一个gzip后缀,你可以这样做吗
if phrasetablefile.endswith('.gz'):
opener = gzip.open
else:
opener = open
with opener(phrasetablefile, 'rb') as fin:
for line in fin:
# do something
为什么不把它拉到一个函数中,例如
进程
,然后只需要进程(fin)
?此外,至少,这应该是例外情况除外@jornsharpe,智慧之言。
if phrasetablefile.endswith('.gz'):
opener = gzip.open
else:
opener = open
with opener(phrasetablefile, 'rb') as fin:
for line in fin:
# do something