簡體   English   中英

如何在循環中動態創建目標文件名列表?

[英]How do I dynamically create a list of target filenames in a loop?

我正在嘗試以.csv格式創建其中具有特定字符串的文件列表,但是盡管循環會打印每個文件名,但我的列表僅存儲所有文件名中的最后一個。

我試過創建一個列表,然后將其輸出為csv,但輸出的唯一內容是列表的最后一個元素。

for fname in glob.glob('*.txt'):   
  if os.path.isfile(fname):    
    with open(fname) as f:   
        for line in f:       
            if 'target' in line:    
                mylist = []
                mylist.append(fname)
                #print ('found code in file %s' %fname)
                print(mylist)
                with open("out.csv","w") as l:
                    wr = csv.writer(l,delimiter="\n")
                    wr.writerow(mylist)
                    break

此代碼的輸出是

['target_1.txt']
['target_3.txt']

我希望這是csv格式,但是當我查看out.csv文件時,該文件中只有target_3.txt。 我想要的是帶有行的csv:

['target_1.txt']
['target_3.txt']

以@JonClements的評論並發布作為答案,可以更輕松地理解他在說什么。

with open("out.csv","w") as l:                # Open "out.csv" ONCE
    for fname in glob.glob('*.txt'):   
        if os.path.isfile(fname):    
            with open(fname) as f:   
                for line in f:       
                    if 'target' in line:    
                        mylist = []
                        mylist.append(fname)
                        #print ('found code in file %s' %fname)
                        print(mylist)
                        wr = csv.writer(l,delimiter="\n")
                        wr.writerows(mylist)
                        break

注意縮進的區別。 與其在for循環內執行第二步with不如在循環完成后以相同的縮進級別執行。

mylist = []
for fname in glob.glob('*.txt'):
  if os.path.isfile(fname):
    with open(fname) as f:
        for line in f:
            if 'target' in line:
                mylist.append(fname)
                #print ('found code in file %s' %fname)
                break
with open("out.csv","w") as l:
    wr = csv.writer(l,delimiter="\n")
    wr.writerows(mylist)

還要注意我們如何在for循環之前創建mylist 您將在循環內覆蓋該列表的先前值(也是如此)。 如評論中所述,我還將writerow更改為writerows以寫入所有收集的行。

暫無
暫無

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

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