使用Python替换CSV文件中的分隔符

时间:2019-02-28 00:42:04

标签: python csv delimiter str-replace

我有一个包含多个CSV文件的文件夹。这些文件都包含以垂直和水平双倍分隔符绘制的框。我试图将所有这些文件导入python,将该分隔符更改为管道,然后将新文件保存到另一个位置。我当前运行的代码没有任何错误,但实际上没有执行任何操作。有什么建议吗?

import os
import pandas as pd

directory = 'Y:/Data'
dirlist = os.listdir(directory)
file_dict = {}
x = 0

for filename in dirlist:
    if filename.endswith('.csv'):
        file_dict[x] = pd.read_csv(filename)
        column = file_dict[x].columns[0]
        file_dict[x] = file_dict[x][column].str.replace('╬', '|')
        file_dict[x].to_csv("python/file{}.csv".format(x))
        x += 1

这是示例数据的图片:

enter image description here

2 个答案:

答案 0 :(得分:0)

with i as open(filename):
    with o as open(filename+'.new', 'w+):
        for line in i.readlines():
            o.write(line.replace('╬', '|'))

或者,跳过python,并从您的终端上使用sed

$ sed -i 's/╬/|/g' *.csv

假定原始定界符未出现在任何转义的字符串中,则此速度应比使用常规csv模块略快。 Panada在读取CSV时似乎在做一些文件系统的伏都教徒,所以如果速度如此之快,我也不会感到惊讶。 sed几乎肯定会击败他们。

答案 1 :(得分:0)

我们可以直接使用csv库中的内置功能为我们读取文件,然后重新写入,而不是直接用新字符替换出现的字符(也可以替换字符的转义出现的字符)。 / p>

import csv
with open('myfile.csv', newline='') as infile, open('outfile.csv', 'w', newline='') as outfile:
    reader = csv.reader(infile, delimiter='╬')
    writer = csv.writer(outfile, delimiter='|')
    for row in reader:
        writer.writerow(row)

改编自docs