Python更新文件的行内容

时间:2018-01-09 19:24:52

标签: python

我正在比较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

2 个答案:

答案 0 :(得分:0)

让它工作的一个简单方法是在迭代第一个时写入新的.csv。虽然看起来你打算使用pandas,但为什么不把它加载到数据框中,在框架内修改它并将其保存回文件。

答案 1 :(得分:0)

我一直被告知不要更新我正在阅读/比较的文件。

当我正在做比较像这样的csv文件时,我想构建一个新的文件内容列表,然后检查所需的行或值是否在新列表中。

在你的情况下我会;

  • 创建一个包含您正在查看的csv文件值的新列表
  • 定义您要查找的字符串
  • 检查所需字符串是否在新列表的第25个元素中
  • 如果附加了带有所需字符串的第25个元素。
  • 使用您构建/附加的列表
  • 编写新的更新的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']