Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查gzip或纯文本并在不检查扩展名的情况下读取文件-python_Python_File Io_Compression_Gzip - Fatal编程技术网

检查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