繁体   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