簡體   English   中英

如何使用循環在 csv python 中寫入多行

[英]How to write multiple rows in csv python with loop

嗨,我正在使用這種方法從 csv 文件中寫入 csv 文件,這是一個散列代碼,但我只收到 output 中的最后一行,如何將每一行添加到前一行?

import hashlib
import csv
d = dict()
result = ()
for i in range(0 , 9999) :
    n = hashlib.sha256(str(i).encode())
    d[n.hexdigest()] = str(i)
with open('/Users/MJ-Mac/Desktop/karname.txt') as f:
    file = csv.reader(f)
    for row in file :
        a = row[0]
        b = d[row[1]]
        result = (a , b)
        with open('/Users/MJ-Mac/Desktop/result3.txt', 'w') as f2:
            file2 = csv.writer(f2)
            file2.writerow(result)

其他答案建議用'a'替換'w' ,使用csv.writer時沒有必要這樣做。 每次運行程序時,它還可能使您的文件增長。

與其重新打開和關閉 relut3.txt,不如保持打開狀態並僅使用一位編寫writer

import hashlib
import csv
d = dict()
result = ()
for i in range(0 , 9999) :
    n = hashlib.sha256(str(i).encode())
    d[n.hexdigest()] = str(i)
with open('/Users/MJ-Mac/Desktop/result3.txt', 'w') as result_file:
    result_writer = csv.writer(result_file)  # only create this once
    
    with open('/Users/MJ-Mac/Desktop/karname.txt') as f:
        file = csv.reader(f)
        for row in file :
            a = row[0]
            b = d[row[1]]
            result = (a , b)

            result_writer.writerow(result)  # use the already created writer

您的代碼正在向文件寫入一行,然后再次打開文件並將下一行寫入程序的全部內容。 所以在第二次循環中只有第二行會在文件中。

import hashlib
import csv
d = dict()
result = ()
for i in range(0 , 9999) :
    n = hashlib.sha256(str(i).encode())
    d[n.hexdigest()] = str(i)
with open('/Users/MJ-Mac/Desktop/karname.txt') as f:
    file = csv.reader(f)
    for row in file :
        a = row[0]
        b = d[row[1]]
        result = (a , b)
        with open('/Users/MJ-Mac/Desktop/result3.txt', 'a') as f2:
            file2 = csv.writer(f2)
            file2.writerow(result)

打開文件然后將所有內容寫入其中可能會更好:

import hashlib
import csv
d = dict()
result = ()
for i in range(0 , 9999) :
    n = hashlib.sha256(str(i).encode())
    d[n.hexdigest()] = str(i)
with open('/Users/MJ-Mac/Desktop/karname.txt') as f:
    file = csv.reader(f)
    with open('/Users/MJ-Mac/Desktop/result3.txt', 'w') as f2:
        file2 = csv.writer(f2)
        for row in file :
            a = row[0]
            b = d[row[1]]
            result = (a , b)
            
            file2.writerow(result)

我不能自己運行這個,因為你的數據不包括在內。

但是,我認為你的問題是with open('/Users/MJ-Mac/Desktop/result3.txt', 'w')有“w”標志——代表“寫”——所以你的數據是被覆蓋,您可能需要“附加”的“a”標志,以便每一行都將附加到您正在導出的數據中。

import hashlib
import csv
d = dict()
result = ()
for i in range(0 , 9999) :
    n = hashlib.sha256(str(i).encode())
    d[n.hexdigest()] = str(i)
with open('/Users/MJ-Mac/Desktop/karname.txt') as f:
    file = csv.reader(f)
    for row in file :
        a = row[0]
        b = d[row[1]]
        result = (a , b)
        with open('/Users/MJ-Mac/Desktop/result3.txt', 'a') as f2:
            file2 = csv.writer(f2)
            file2.writerow(result)

一次打開輸入文件和 output 文件更容易:

with open('/Users/MJ-Mac/Desktop/karname.txt') as f, open('/Users/MJ-Mac/Desktop/result3.txt', 'w') as f2:
    output = csv.writer(f2)
    for row in csv.reader(f):
        output.writerow([row[0], d[row[1]])
 

暫無
暫無

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

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