以下代码用于读取第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)
答案 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)