比较两个文件然后替换值

时间:2019-04-17 06:14:11

标签: python python-3.x csv

File1.csv

lblCategoryName

File2.csv

maxY

Output.csv

column1,column2,column3
hello,halo,20A
hello2,halo2,50A
hello3,halo3,50A

我正在比较book1,book2 20A,10 50A,20 之间的文件。如果column1, column2, column3 hello,halo,10 hello2,halo2,20 hello23,halo3,20 的值与File1 and File2的值匹配,则复制File1 - column3的值并将其替换为File2 - book1。预期的结果是File2 - book2

到目前为止,我参考了其他资源,并且我确实尝试过

File1 - column3

结果将替换所有Output.csv值,而不进行比较。我不确定哪一部分出了问题。

我更新了csv文件和预期的输出

4 个答案:

答案 0 :(得分:0)

除了@Kamal Nayan提到的间距问题之外,这是一个更简单的实现,它同时迭代两个csv_reader

import csv

with open('File1.csv', 'r') as csv_file, open('File2.csv', 'r', newline='') as csv_file2 \
        ,open('output.csv', 'w', newline='') as new_file:
    csv_reader = csv.DictReader(csv_file)
    csv_reader2 = csv.DictReader(csv_file2)
    csv_writer = csv.writer(new_file)

    csv_writer.writerow([ 'column1', 'column2', 'column3'])

    for row1,row2 in zip(csv_reader,csv_reader2):
      csv_writer.writerow([row1['column1'],row1['column2'],row2['book2']])

输出:

column1,column2,column3
hello,halo,10
hello2,halo2,20

演示:https://repl.it/@glhr/55721022-combining-CSVs

答案 1 :(得分:0)

我会选择使用带有try-except方法的csv模块:

example1.csv:

book1, book2
20A,    10
50A,    20

example2.csv:

column1, column2, column3
hello,   halo,     20A
hello2,  halo2,    50A

因此

import csv

reader1 = csv.reader(open('example2.csv', 'r'), delimiter=',', quotechar='"')
next(reader1, None)    # skipping the headers

reader2 = csv.reader(open('example1.csv', 'r'), delimiter=',', quotechar='"')
next(reader2, None)   # skipping the headers


while True:
   try:
      row1 = next(reader1)
      row2 = next(reader2)
      if (row1[2].strip() == row2[0].strip()):
          print("equal values: {}, {}".format(row1[2].strip(), row2[0].strip()))
      else:
          print("different values")
   except StopIteration:
       break

输出

equal values: 20A, 20A
equal values: 50A, 50A

答案 2 :(得分:0)

您可以为此使用熊猫。您要执行的操作称为联接。

import pandas as pd

f1 = pd.read_csv("File1.csv", delimiter=';')
f2 = pd.read_csv("File2.csv", delimiter=';')

tmp = pd.merge(f1, f2, left_on='column3', right_on='book1')[['column1', 'column2', 'book2']]
tmp = tmp.rename(columns={'book2': 'column3'})

print(tmp)

最后一步只是重命名最后一列。

   column1 column2  column3
0   hallo    halo       10
1   hallo    halo       20

答案 3 :(得分:0)

由于您是python的新手,所以我也建议您学习如何使用pandas,这使得处理csv文件非常容易和直观。这个答案只是对另一种方法的建议。您可以在熊猫中获得所需的结果,如下所示:

import express from 'express';
import session from 'express-session';
import own from './types/own';

const app = express();
app.get('/', (req, res) => {
    let username = req!.session!.user.login;
});

您可以使用import pandas as pd # Read the files df1=pd.read_csv('File1.csv') df2=pd.read_csv('File2.csv') # Merge the two dataframes(tables) result=pd.merge(df1,df2,left_on=['column3'],right_on=['book1']) # Delete the unwanted columns (because merge returns both column3 and book1) result.drop(columns=['column3','book1'],inplace=True) # Rename the column book2 to column3 result.rename(columns={'book2':'column3'},inplace=True) ''' Final result looks like this column1, column2, column3 hello,halo,10 hello2,halo2,20 ''' 查看最终结果。 SO对熊猫有很多支持,它们的文档中也有很多示例。如果您感兴趣的话,可以考虑学习熊猫。

以下是我在代码中使用的功能文档的链接:

read_csv

merge

drop

rename