我有一个包含多个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
这是示例数据的图片:
答案 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