我有一个如下的csv文件:
CSV:
H1,H2,H3
A_B,C1,D
F_2j,G,p5
我正在尝试从第一列中删除“_”和数字。这是我试过的
for i in range(len(max(cols, key=len))):
transposed = ([(c[i] if i<len(c) else '') for c in cols])
str(transposed[0]).replace("_",";").split()
它确实替换了'_',但原始的转置仍会打印相同的csv文件。如何用旧的替换这个新列?另外,如何从column1中删除数字以提供以下输出?
期望的输出:
H1,H2,H3
A;B,C1,D
F;j,G,p5
答案 0 :(得分:2)
问题可能是对replace
行为的基本误解 - 它返回修改后的字符串的副本,但不会就地修改字符串。要更换“take”,您必须将其分配回原始字符串。请考虑以下事项:
>>> text = 'blah_blah_blah'
>>> print(text.replace('_', ';'))
blah;blah;blah
>>> print(text)
blah_blah_blah
如您所见,原始text
字符串未受replace
调用的影响。要实际修改它:
>>> text = text.replace('_', ';')
>>> print(text)
blah;blah;blah
至于消除数字,你可以在@Hackaholic的答案中使用基于正则表达式的方法(它也可以很好地处理'_'到';'转换) - 我只是认为会有好处揭示了replace
字符串方法的行为。
答案 1 :(得分:1)
你可以试试这个:
import re
with open('file.csv') as f:
for x in f:
print re.sub("_\d*",';',x) # here you can store it in variable and do procession on it
输出:
H1,H2,H3
A;B,C1,D
F;j,G,p5
答案 2 :(得分:1)
我建议使用Python's CSV Module进行读写操作。这最终可能会简化您已有的许多逻辑。确保您实际上是将行写入文件(我在示例代码中没有看到)。我还建议使用正则表达式进行替换和删除:
sub = re.sub("_\d*", ";", my_column)
# use sub as your new column
编辑:我误读了OP想要删除数字的内容。关于何时擦除数字的规则(仅在_字符之后?所有数字如果有_?),这是不明确的。使用OP的示例输出作为规则(&#34; _&#34之后的所有数字;)
答案 3 :(得分:1)
import csv
import re
with open("in.csv") as f, open("out.csv", "w") as out:
out.write(next(f))
r = csv.reader(f, delimiter=",")
for row in r:
out.write("{},{}\n".format(re.sub("_\d+|[_\d+]", ";",row[0]), ",".join(row[1:])))