更换后无法写入CSV

时间:2016-09-23 04:14:56

标签: python csv

我有一个输入文件,我正在进行字符串替换操作。

我逐个单元地读取文件,替换字符串,然后将其写回新的CSV文件。

input_file = open('/Users/tcssig/Desktop/unstacked2.csv', 'r', encoding='utf-8')
output_file = open('/Users/tcssig/Desktop/unstacked3.csv', 'w', encoding='utf-8')
writer = csv.writer(output_file , delimiter=' ')
reader = csv.reader(input_file)
for row in reader:
    for string in row:
       data = [string.replace('read','write')]
       print(data)
       writer.writerow(data)

上面的代码运行良好,但我得到一个空的输出文件。

Example of data :

    reading reading reading reading
interval        0   1   2   3

who axis


Mikael  X   0   10  20  30

Mikael  Y   50  40  30  20

Mikael  Z   100 90  80  70

Mike    X   0   0.1 0.2 0.3

Mike    Y   0.5 0.4 0.3 0.2

Mike Z 1 0.9 0.8 0.7

我缺少什么?

2 个答案:

答案 0 :(得分:2)

关闭您的文件:

output_file.close()
input_file.close()

另请参阅有关上下文管理器使用的答案 https://stackoverflow.com/a/441446/4663466

答案 1 :(得分:1)

输入文件的内容:

"Roll No" English read Science
"Roll No" English Write Science

您的代码出现问题:

  1. 正如 @Scott 所述,文件未关闭。
  2. 您正在按for string in row:读取单元格并在那里替换字符串。但是在替换之后,您将该单元格写为文件中的行。例如,带有代码的输出文件看起来是文件:

    Roll No

    科学

  3. 这是由于上述原因,即您正在编写每个单元格。

    如何让它发挥作用?

    注释内嵌代码

    import csv
    input_file = open('mark.csv', 'r', encoding='utf-8')
    output_file = open('result.csv', 'w')
    writer = csv.writer(output_file , delimiter=' ', encoding='utf-8')
    reader = csv.reader(input_file)
    for row in reader:
        #Initailize empty list for each row
        data = []
        for string in row:
           #Replace and add to data list
           data.append(string.replace('read','write'))
        #Now write complete
        writer.writerow(data)
    
    input_file.close()
    output_file.close()
    

    <强>输出:

    "Roll No" English write Science
    
    "Roll No" English Write Science
    

    如果没有csv模块,你可以实现同样的目标。

    with open("mark.csv") as input_file:
        with open("result.csv",'w') as output_file:
            for line in input_file:
                new_line = (line.replace("read","write")).replace(","," ")
                output_file.write(new_line)