簡體   English   中英

變量不會在嵌套循環python中更改

[英]variable does not change inside of a nested loop python

Python初學者在這里。 我需要從第一個文件“ src.csv”中獲取每一行,該文件的字符串類似於(300行)

"12345, a, b"
"234567, e, c"

並在第二個文件“ data.csv”中查找字符串(100k行)

"12345678"
"23456789011248"

按第一個文件的第一列,其中數字是secon文件中一個字符串的子字符串。 然后寫入輸出文件。

import sys
import csv



dat_file_name = "data.dat"
src_file_name = "src.csv"
out_file_name = "out.csv"

if (len(sys.argv) == 4):
    dat_file_name = sys.argv[1]
    src_file_name = sys.argv[2]
    out_file_name = sys.argv[3]


out_writer = open(out_file_name, "w")


i = 0
j = 0
with open(src_file_name, "r") as src, open(dat_file_name, 'r') as dat:
    src_reader = csv.reader(src)
    dat_reader = csv.reader(dat)

    for sub_string in src_reader:

        # print sub_string

        for string in dat_reader:

            out_writer.write(sub_string[0])
            out_writer.write("\n")

            print sub_string[0]

            i+=1
        j+=i


out_writer.close()

print i #for debug only
print j #for debug only

但是,我沒有第一個文件的第一行的第一個值,而不是“ sub_string [0]”的期望值。

12345
12345
...

在每次迭代中。 而且,輸出文件包含100k行而不是30m行。

我的問題是為什么我的嵌套循環用法版本具有意外行為。 為什么變量“ substring [0]”在嵌套循環內不會更改? 我將不勝感激任何幫助。

為什么要在嵌套循環中更改它? 內部循環在dat_reader上進行迭代,但是sub_string外部迭代的結果,除非內部循環完全完成,否則外部迭代無法更改。

您根本不需要嵌套循環; 您想一次遍歷兩個文件。 您可以使用zip來做到這一點:

for sub_string, string in zip(src_reader, dat_reader):
    out_writer.write(sub_string[0])

而且您根本不需要索引ij ,將它們刪除。

好了,這段代碼有幾處錯誤。 首先,您甚至不檢查子字符串,其次,循環是向后的。

out_file_name = "out.csv"

if (len(sys.argv) == 4):
    dat_file_name = sys.argv[1]
    src_file_name = sys.argv[2]
    out_file_name = sys.argv[3]

with open(src_file_name, "r") as src, open(dat_file_name, 'r') as dat, open(out_file_name, "w") as out_writer:
    src_reader = csv.reader(src)
    dat_reader = csv.reader(dat)

    for string in dat_reader:    
        for sub_string in src_reader:
            if sub_string[0] in string: #Check if substring in string
                out_writer.write(sub_string[0])
                out_writer.write("\n")

                print sub_string[0]
        src.seek(0) #Your file pointer is at the end of the file so move it back to the beginning

暫無
暫無

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

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