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文件和预期的输出
答案 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
答案 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对熊猫有很多支持,它们的文档中也有很多示例。如果您感兴趣的话,可以考虑学习熊猫。
以下是我在代码中使用的功能文档的链接: