【问题标题】:Open two files pairwise out of many - python从许多文件中成对打开两个文件 - python
【发布时间】:2018-08-09 12:58:01
【问题描述】:

大家好,我是 python 新手,需要一些帮助。

我的问题是,我有一个充满文本文件的文件夹(其中包含列表),其中两个属于彼此,需要阅读和比较。

包含许多文件的文件夹:File1_in.xlo、File1_out.xlo、File2_in.xlo、File2_out.xlo、...

--> 所以File1_in.xlo 和File1_out.xlo 属于同一个,需要比较一下。

我已经可以附加“in-Files”(或“out-Files”)的列表,然后比较它们,但是由于文件很多,列表变得非常长(成千上万的条目),所以想法是成对比较文件或列表。

我的第一次尝试是这样的:

import os

for filename in sorted(os.listdir('path')):
    if filename.endswith('in.xlo'):
        with open(os.path.join('path', filename)) as inn:
            lines = inn.readlines()
            for x in lines:
                temperatureIn = x.split()[4] 

    if filename.endswith('out.xlo'):
        with open(os.path.join('path', filename)) as outt:
            lines = outt.readlines()
            for x in lines:
                temperatureOut = x.split()[4]   #4. column in list

所以问题是,如您所见,在我将它们与 'temperatureOut' 进行比较之前,'temperatureIn' 总是被覆盖。我认为/希望必须有一种方法可以同时打开两个文件来比较列表条目。

我希望你能理解我的问题,有人可以帮助我。

谢谢

【问题讨论】:

    标签: python list compare


    【解决方案1】:

    使用zip 成对访问in-Files 和out-Files

    files = sorted(os.listdir('path'))
    in_files = [fname for fname in files if fname.endswith('in.xlo')]
    out_files = [fname for fname in files if fname.endswith('out.xlo')]
    for in_file, out_file in zip(in_files, out_files):
        with open(os.path.join('path', in_file)) as inn, open(os.path.join('path', out_file)) as outt:
            # Do whatever you want
    

    【讨论】:

    • 感谢您的快速回答,结合@Matina G 的回答帮助很大(不知道这是否有效^^)
    • 但是你能解释一下,这里发生了什么:fname for fname in files
    【解决方案2】:

    将它们添加到 for 循环之前创建的列表中,如下所示:

     temps_in =[]     
     for x in lines:
         temperatureIn = x.split()[4] 
         temps_in.append(temperatureIn)
    

    对温度做同样的事情,然后比较你的两个列表

    【讨论】:

    • 感谢您的快速回答,结合 Sunitha 的回答帮助很大。
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多