python脚本以查找要合并的最大值
我有两个这种格式的文件 1.txt 我想做的是通过考虑第一列合并这两个文件,并按如下方式附加输出 预期产量 我写的脚本不起作用python脚本以查找要合并的最大值,python,Python,我有两个这种格式的文件 1.txt 我想做的是通过考虑第一列合并这两个文件,并按如下方式附加输出 预期产量 我写的脚本不起作用 file1=raw_input('Enter the first file name: ') file2=raw_input('Enter the second file name: ') with open(file1, 'r') as f1: with open(file2, 'r') as f2: mydict = {} for row
file1=raw_input('Enter the first file name: ')
file2=raw_input('Enter the second file name: ')
with open(file1, 'r') as f1:
with open(file2, 'r') as f2:
mydict = {}
for row in f1:
mydict[row[0]] = row[1:]
for row in f2:
mydict[row[0]] = mydict[row[0]].extend(row[1:])
fout = csv.write(open('out.txt','w'))
for k,v in mydict:
fout.write([k]+v)
以下方法应该有效:
import csv
d_1 = {}
with open('1.csv') as f_1:
for row in csv.reader(f_1):
d_1[row[0]] = row[4:]
with open('2.csv') as f_2, open('out.csv', 'wb') as f_out:
csv_out = csv.writer(f_out)
for row in csv.reader(f_2):
if row[0] in d_1:
row.extend(d_1[row[0]])
csv_out.writerow(row)
首先将1.csv
读入字典,去掉前三列。然后,它读取2.csv
中的每个条目,如果第一列与字典中的条目匹配,它会在写入输出之前附加结果
注意:将忽略1.csv
中的条目,而不是2.csv
中的条目。其次,2.csv
中不在1.csv
中的条目将被原封不动地写入
这将为您提供一个out.csv
文件,如下所示:
import csv
d_1 = {}
with open('1.csv') as f_1:
for row in csv.reader(f_1):
d_1[row[0]] = row[4:]
with open('2.csv') as f_2:
with open('out.csv', 'wb') as f_out:
csv_out = csv.writer(f_out)
for row in csv.reader(f_2):
if row[0] in d_1:
row.extend(d_1[row[0]])
csv_out.writerow(row)
223456233334334,456674566677779888122344455633332233444555222334223422233222,55666666
333883,445,445,4445,44,556,555,333,44445,5556,5555,223,334,5566,334,445,667,334,556,776,45,2223,3334,4444
对于Python 2.6,使用将
拆分为两行,如下所示:
import csv
d_1 = {}
with open('1.csv') as f_1:
for row in csv.reader(f_1):
d_1[row[0]] = row[4:]
with open('2.csv') as f_2:
with open('out.csv', 'wb') as f_out:
csv_out = csv.writer(f_out)
for row in csv.reader(f_2):
if row[0] in d_1:
row.extend(d_1[row[0]])
csv_out.writerow(row)
你的脚本不起作用,因为你做了一些错误
行
是一个字符串,因此行[0]
是第一个字符,而不是第一个数字
方法.extend
不返回任何内容,因此使用=
没有意义
我将用以下方式修复您的脚本:
import csv
mydict = {}
with open('1.csv') as f:
reader = csv.reader(f)
for row in reader:
mydict[row[0]] = row[1:]
with open('2.csv') as f:
reader = csv.reader(f)
with open('out.csv', 'w') as fout:
writer = csv.writer(fout)
for row in reader:
new_row = row + mydict[row[0]]
writer.writerow(new_row)
你的问题是什么?它是如何工作的?csv\u out.writerow(row)
应该在if子句中。这将删除2.csv
中没有enty in1.csv
的任何现有条目。我想你写的行也不符合脚本的if子句,但我不想要1.csv中的前3列,由于预期输出没有问题,我已经为您更新了脚本。只需在字典中存储四列。