我收到有关此代码的错误。它是“TypeError:期望的字符串或缓冲区”。我环顾四周,发现错误是因为我传递了re.sub一个列表,而且它没有列表。但是,我无法弄清楚如何将我的行从csv文件更改为它将读取的内容。
我正在尝试将csv文件中的所有句点更改为逗号。这是我的代码:
select
t.ID
from
YourTable t
left join ValueTable v on v.ID = t.ID
group by
t.ID
order by
min(v.Value)
如果已经在某个地方回答过,我很抱歉。关于这个错误肯定有很多答案,但我无法使用我的csv文件。另外,作为旁注,这最初是一个.xslb excel文件,我转换为csv以便能够使用它。那有必要吗?
答案 0 :(得分:2)
您可以使用列表理解将替换应用于row
for row in reader:
newrow = [re.sub(r"(\.)+", ",", item) for item in row]
writer.writerow(newrow)
答案 1 :(得分:0)
for row in reader
不会返回单个元素来解析它,而是返回row
中元素的列表,因此您必须解压该列表并分别解析每个项目,就像@Trii一样:
[re.sub(r'(\.)+','.',s) for s in row]
答案 2 :(得分:0)
在本例中,我们使用 glob
访问目录中的所有 csv
文件。
下面的代码会覆盖源 csv
文件,因此无需创建输出文件。
注意:
如果您想使用 re.sub
提供的参数获取第二个文件,请将 write = open(i, 'w')
替换为 write = open('secondFile.csv', 'w')
import re
import glob
for i in glob.glob("*.csv"):
read = open(i, 'r')
reader = read.read()
csvRe = re.sub(re.sub(r"(\.)+", ",", str(reader))
write = open(i, 'w')
write.write(csvRe)
read.close()
write.close()