如何使用python脚本将数据写入现有csv文件中的新列

时间:2016-08-11 09:02:31

标签: python python-2.7 python-3.x

以下代码用于读取第2,3,4,8列File1中的数据,并将其写入NewFile。应在temp_list中搜索每列2中的数据(已存储在File3中)。如果找到,File3中每行第三列中的数据将附加temp_list中存储的数据。但是第二个for循环仅考虑第一行中的column2数据。它没有考虑剩余行中第2列中的数据。

我在第二个循环中给出了打印var1,以查看是否正在考虑每个第2列数据(在Newfile中复制)。但输出仅在File3的第一行显示值。不搜索其他行中的值。有人可以帮我理解我的代码中的问题吗?

import csv

f1 = csv.reader(open("C:/Users/File1.csv","rb"))
f2 = csv.writer(open("C:/Users/NewFile.csv","wb"))
f3 = csv.reader(open("C:/Users/File3.csv","rb"))

for row_f1 in f1:

    if not row_f1[0].startswith("-"):

        temp_list = [row_f1[1],row_f1[2],row_f1[3],row_f1[7]]

        var1 = row_f1[1]

        for row_f3 in f3:

            if var1 in row_f3:

                temp_list.append(row_f3[2])


        f2.writerow(temp_list)

2 个答案:

答案 0 :(得分:0)

您遇到的一个问题是,当您执行$result = mysql_query($query);时,您会读取该文件并且不会自动开始。一个选项是将行保存到列表后读取它,但每次检查列表中是否存在for row_f3 in f3:将非常慢。

您尝试查找var1的row_f3中的字段是什么?如果键是相同的,您可以使用字典:

var1

然后:

d = dict()
for row_f3 in f3:
    d[row_f3[field_index]]  = row_f3[2]

你的文件有多大?如果它们<1Gb,您也可以尝试使用pandas而不是逐行阅读:

   new_field = d.get(var1)
   if new_field is not None: temp_list.append(new_field)

答案 1 :(得分:0)

如果我理解你的描述,以下应该做你想要的。您的代码的主要问题是它不会关闭并重新打开第三个文件,以便从中读取和复制数据。由于你的代码对于一般文件的关闭也很草率,我已经通过修改它来使用with语句来处理它,它会自动处理它。

import csv

with open("C:/Users/File1.csv", "rb") as file1, \
     open("C:/Users/NewFile.csv", "wb") as file2:
        f2 = csv.writer(file2)

        for row_f1 in csv.reader(file1):
            if not row_f1[0].startswith("-"):
                temp_list = [row_f1[1], row_f1[2], row_f1[3], row_f1[7]]
                var1 = row_f1[1]
                var1_found = False
                with open("C:/Users/File3.csv", "rb") as file3:
                    for row_f3 in csv.reader(file3):
                        if var1 in row_f3:
                            var1_found = True
                            break
                if var1_found:
                    with open("C:/Users/File3.csv", "rb") as file3:
                        for row_f3 in csv.reader(file3):
                            temp_list.append(row_f3[2])
                f2.writerow(temp_list)