首页 > 解决方案 > 从交互式片段创建 python 脚本

问题描述

我正在从我的 csv 文件中清除非分隔符逗号。我有 3 个 python 片段可以交互地更改分隔符、替换逗号并重新实例化逗号分隔符。重新测试后,我发现这个单个脚本不起作用,我想就在单个脚本中运行这些的最佳实践方法提供一些反馈。

#!/usr/bin/env python
# changes delimiter 
import csv      
reader = csv.reader(open("commas.csv", "rU"), delimiter=',')
writer = csv.writer(open("commas2.csv", 'w'), delimiter=';')
writer.writerows(reader)
quit()

# replaces commas with spaces           
s = open("commas2.csv").read()
s = s.replace(',', ' ')
f = open("commas3.csv", 'w')
f.write(s)
f.close()
quit()

# changes delimiter back to commas
import csv
reader = csv.reader(open("commas3.csv", "rU"), delimiter=';')
writer = csv.writer(open("commas4.csv", 'w'), delimiter=',')
writer.writerows(reader)     
quit()

标签: pythonpython-3.xcsv

解决方案


正如您所说,您需要使用with语句正确关闭所有文件(您不需要,但这是最佳做法):

import csv
with open("commas.csv", "r") as fr:
    with open("commas2.csv", "w") as fw:
        reader = csv.reader(fr, delimiter=',')
        writer = csv.writer(fw, delimiter=';')
        writer.writerows(reader)


with open("commas2.csv", "r") as fr:
    s = fr.read()
with open("commas3.csv", "w") as fw:
    fw.write(s.replace(",", " "))

# changes delimiter back to commas
with open("commas3.csv", "r") as fr:
    with open("commas4.csv", "w") as fw:
        reader = csv.reader(fr, delimiter=';')
        writer = csv.writer(fw, delimiter=',')
        writer.writerows(reader)

但是您可以通过文件来执行此操作,因为您已经在内存中拥有所有 csv 内容,您可以逐个单元地修改它们,而不是用不同的分隔符保存它们,然后将分隔符更改回来:

import csv

with open("commas.csv", "r") as f:
    reader = csv.reader(f)
    new_data = [] # new csv 2d array
    for line in reader:
        l = list()
        for cell in line: # go over every cell
            l.append(cell.replace(",", " ")) # replace commas then save it to new array
        new_data.append(l)

with open("commas2.csv", "w") as f:
    writer = csv.writer(f)
    writer.writerows(new_data)

推荐阅读