我正在比较2个csv文件,并尝试在符合条件的情况下更新其中一个文件的分隔行。
在这种情况下,我将第一个文件的第一个字段与第二个文件的第26个字段进行比较,如果找到相同的值,我想用“OK”字符串更新字符串的最后一个字段。没有显示错误,但文件的行没有更新,我想在下面的例子中,我只是更新var而不是实际的文件行,但我不知道该怎么做。
简化代码如下:
import pandas as pd
import csv
file1 = 'C:\\Users\\MyName\\Desktop\\Some_Directory\\file1.csv'
file2 = 'C:\\Users\\MyName\\Desktop\\Some_Directory\\file2.csv'
for line in file1:
fields_f1 = line.split(";")
f1_field1 = fields_f1[0];
for line2 in file2:
fields_f2 = line2.split(",")
f2_field26 = fields_f1[25]
if f1_field1 is f2_field26:
UpdateString = ";OK"
line = str(line) + UpdateString
答案 0 :(得分:0)
让它工作的一个简单方法是在迭代第一个时写入新的.csv。虽然看起来你打算使用pandas,但为什么不把它加载到数据框中,在框架内修改它并将其保存回文件。
答案 1 :(得分:0)
我一直被告知不要更新我正在阅读/比较的文件。
当我正在做比较像这样的csv文件时,我想构建一个新的文件内容列表,然后检查所需的行或值是否在新列表中。
在你的情况下我会;
这是我想出的使用单个文件和预定义关键字来查找的内容。
对于您的情况,只需添加要从中获取关键字的文件,然后将关键字设置为该列表/文件中的[0]元素
希望这有帮助
import csv
import os
csv_file = os.path.join(os.path.join(os.environ['USERPROFILE']),'Dir', 'file.csv')
updated_csv_file_path = os.path.join(os.path.join(os.environ['USERPROFILE']),'Dir', 'updated_file.csv')
with open(csv_file, 'r') as rawcsv, open(updated_csv_file_path, 'w', newline='') as csv_out_file:
reader = csv.reader(rawcsv)
writer = csv.writer(csv_out_file)
desired_file1_string = 'Greg'
update_string = 'OK'
file2_contents = []
# adds all of rows (lists) found in the csv file to a new list for us to update
for item in reader:
file2_contents.append(item)
print('Inital value of the 25th element: \n {}'.format(file2_contents[25]))
# if the desired string is in the 25th element of the list, appends ';OK' to the end of that list
if desired_file1_string in file2_contents[25]:
file2_contents[25].append(update_string)
print('Post append value of the 25th element: \n{}'.format(file2_contents[25]))
# writes a new csv file with the contents of file2_contents list
writer = csv.writer(csv_out_file)
for line in file2_contents:
writer.writerow(line)
结果
第25个元素的初始值:
['Greg','Unruh','','some_words','更多单词']
发布第25个元素的附加值:
['Greg','Unruh','','some_words','更多单词','OK']