Python:如何从另一个csv文件写入值到csv文件

2 投票
2 回答
10113 浏览
提问于 2025-04-18 08:48

index.csv文件中,它的第四列有十个数字,这些数字的范围是从15。每个数字可以看作是一个索引,而每个索引对应着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 个回答

-1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用某个库时,发现它的某个功能没有按照预期工作。这种情况可能会让人感到困惑,不知道该怎么解决。

通常,解决这类问题的第一步是查看文档,看看有没有相关的说明或者示例代码。如果文档没有提供足够的信息,接下来可以在网上搜索一下,看看其他人是否遇到过类似的问题,或者在社区论坛上提问。

另外,调试也是一个很重要的步骤。通过在代码中添加一些打印语句,或者使用调试工具,可以帮助我们更好地理解代码的执行过程,找出问题所在。

总之,遇到问题时,不要慌张,先查文档,再搜索,最后调试,通常都能找到解决办法。

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)
1

这段代码应该能帮到你:

代码:

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开始的索引。所以你可能需要调整上面的代码,以完全符合你的需求。

撰写回答