Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python脚本以查找要合并的最大值_Python - Fatal编程技术网

python脚本以查找要合并的最大值

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

我有两个这种格式的文件

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 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 in
    1.csv
    的任何现有条目。我想你写的行也不符合脚本的if子句,但我不想要1.csv中的前3列,由于预期输出没有问题,我已经为您更新了脚本。只需在字典中存储四列。