我有一个输入文件,我正在进行字符串替换操作。
我逐个单元地读取文件,替换字符串,然后将其写回新的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
我缺少什么?
答案 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
您的代码出现问题:
您正在按for string in row:
读取单元格并在那里替换字符串。但是在替换之后,您将该单元格写为文件中的行。例如,带有代码的输出文件看起来是文件:
Roll No
英
读
科学
这是由于上述原因,即您正在编写每个单元格。
如何让它发挥作用?
注释内嵌代码
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)