簡體   English   中英

通過比較文件2的所有行與文件1的每一行來讀取兩個文件

[英]reading two files by comparing all lines of file 2 with each line of file 1

我正在嘗試讀取兩個文件,並將兩個列中的日期進行比較,如果日期相同,那么我想比較兩個與日期相對應的值。 我想讀取文件1的一行和文件2的所有行,然后讀取行1的下一行和文件2的所有行。但是,當我嘗試比較日期時,我的for循環讀取了兩個文件只運行一次。 我如何做才能像我之前所說的比較文件1和文件2?

with open('file1.txt') as f1:
with open('file2.txt') as f2:
    for i in (f1):
            column1f1 = (i.split()[0])
            column2f1 = (i.split()[1])
            for j in (f2):
                    column1f2 = (j.split()[0])
                    column2f2 = (j.split()[1])
                    print(column1f1)
                    print(column1f2)

我希望這能給我完整的文件2和文件1的第一行,然后對文件1的所有行重復一次,但是相反,它只在文件1的第一行運行,然后停止。

發生的是,當python遍歷第二個文件時,它會更改“光標”的位置,並且在迭代結束時,光標位置位於文件的末尾。 因此,一旦您嘗試在第二次迭代中遍歷文件,由於“光標”已經在文件末尾,它會立即終止(到達“ StopIteration”)。

在內部循環的末尾,您需要將文件的當前位置(與此相關的光標)返回到文件的開頭。

因此,將是:

date_location = 0
numeric_value_location = 1
with open('file1.txt') as f1:
with open('file2.txt') as f2:
    for i in f1:
            f1_date = (i.split()[date_location])
            f1_numeric = (i.split()[numeric_value_location])
            for j in f2:
                f2_date = (j.split()[date_location])
                f2_numeric = (j.split()[numeric_value_location])
                if f1_date == f2_date:
                    if f2_numeric < f1_numeric:
                        # Do Something

            f2.seek(0, 0)

我希望您能按要求更改代碼。 請注意:

  1. 通過執行以下操作,可以將split操作改進為一行:

     f1_date, f1_number = i.split() 
  2. 我為每個評論請求添加的日期比較有時會中斷。 正確的方法是將字符串date格式化為datetime對象,然后進行比較。

  3. 看到我已用變量替換了位置0、1的索引,以使代碼具有更多含義-將來嘗試使用此做法。

希望這就是您所要求的。 我強烈建議您閱讀快速的python教程,只是為了快速入門。 祝好運。

有關更多詳細信息,請參見此帖子: seek()函數?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM