Python:如何从另一个csv文件写入值到csv文件
在index.csv
文件中,它的第四列有十个数字,这些数字的范围是从1
到5
。每个数字可以看作是一个索引,而每个索引对应着filename.csv
中的一组数字。
filename.csv
中的行号代表索引,每一行有三个数字。我想问的是,如何使用嵌套循环把filename.csv
中的数字转移到index.csv
中。
from numpy import genfromtxt
import numpy as np
import csv
import collections
data1 = genfromtxt('filename.csv', delimiter=',')
data2 = genfromtxt('index.csv', delimiter=',')
out = np.zeros((len(data2),len(data1)))
for row in data2:
for ch_row in range(len(data1)):
if (row[3] == ch_row + 1):
out = row.tolist() + data1[ch_row].tolist()
print(out)
writer = csv.writer(open('dn.csv','w'), delimiter=',',quoting=csv.QUOTE_ALL)
writer.writerow(out)
举个例子,index.csv
的第四列包含1,2,5,3,4,1,4,5,2,3
,而filename.csv
的内容是:
# filename.csv
20 30 50
70 60 45
35 26 77
93 37 68
13 08 55
我需要的是把filename.csv
中对应索引的行写入到index.csv
中,并把这些数字存储在第五、第六和第七列:
# index.csv
# 4 5 6 7
... 1 20 30 50
... 2 70 60 45
... 5 13 08 55
... 3 35 26 77
... 4 93 37 68
... 1 20 30 50
... 4 93 37 68
... 5 13 08 55
... 2 70 60 45
... 3 35 26 77
如果我执行“print(out)”,结果是正确的。然而,当我在命令行输入“out”时,只出现了一行数据,比如[1.0, 1.0, 1.0, 1.0, 20.0, 30.0, 50.0]
我需要的是把“out”变量中的所有值存储起来,并写入到dn.csv文件中。
2 个回答
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用某个库时,发现它的某个功能没有按照预期工作。这种情况可能会让人感到困惑,不知道该怎么解决。
通常,解决这类问题的第一步是查看文档,看看有没有相关的说明或者示例代码。如果文档没有提供足够的信息,接下来可以在网上搜索一下,看看其他人是否遇到过类似的问题,或者在社区论坛上提问。
另外,调试也是一个很重要的步骤。通过在代码中添加一些打印语句,或者使用调试工具,可以帮助我们更好地理解代码的执行过程,找出问题所在。
总之,遇到问题时,不要慌张,先查文档,再搜索,最后调试,通常都能找到解决办法。
with open('dn.csv','w') as f:
writer = csv.writer(f, delimiter=',',quoting=csv.QUOTE_ALL)
for row in data2:
idx = row[3]
out = [idx] + [x for x in data1[idx-1]]
writer.writerow(out)
这段代码应该能帮到你:
代码:
from csv import reader, writer
data = list(reader(open("filename.csv", "r"), delimiter=" "))
out = writer(open("output.csv", "w"), delimiter=" ")
for row in reader(open("index.csv", "r"), delimiter=" "):
out.writerow(row + data[int(row[3])])
index.csv 文件:
0 0 0 1
0 0 0 2
0 0 0 3
filename.csv 文件:
20 30 50
70 60 45
35 26 77
93 37 68
13 08 55
这段代码会产生以下输出:
0 0 0 1 70 60 45
0 0 0 2 35 26 77
0 0 0 3 93 37 68
注意:这里不需要使用numpy。标准库里的 csv
模块就能完成大部分工作。
我还稍微修改了一下你的示例数据,因为你展示的内容在 filename.csv
中的索引超出了样本数据的范围。
另外请注意,Python(和大多数编程语言一样)使用的是从0开始的索引。所以你可能需要调整上面的代码,以完全符合你的需求。