使用Python脚本删除一个逗号

4

我有一个CSV文件,其中一行看起来像这样:

,,,,,,,,,,

这是10个逗号。我希望只删除最后一个(即第10个)逗号,以便该行变为:

,,,,,,,,,

有没有人有处理这种情况的经验?我也使用vim文本编辑器。因此,如果有任何使用python脚本或使用vim进行文本编辑命令的帮助,将不胜感激。


3
你是不是总是只移除逗号,还是试图移除你的CSV中的最后一个字段? - Daniel DiPaolo
4
请说明您希望在哪些地方去掉逗号,比如是想少一个逗号还是有具体数量的逗号需要去掉等等。请简明扼要地描述。 - marr75
我正在尝试按照我的问题描述仅删除最后一个逗号。数字不一定是第十个,那只是一个例子。是的,我想要少一个逗号。 - leba-lev
4个回答

10

在vim中去掉当前行的最后一个逗号:

:s/,$//

对于第n到m行也是一样的操作:

:n,ms/,$//

对整个文件进行同样的操作:

:%s/,$//

2
+1 只针对正则表达式。这假设逗号始终是行中的最后一个字符(没有空格),这应该是可以接受的。 - beatgammit

3

在最简单的情况下,这将完成任务。一旦您更新了问题并说明您要寻找什么,我将会更新代码。

commas = ",,,,,,,,,,,"
print commas.replace(","*10, ","*9)

如果你想在任意给定行中删除最后一个逗号,可以这样做:
import re
commas = """,,,,,,,,,,
            ,,,,,,,,,,"""
print re.sub(r',$', '', commas, re.MULTILINE)

如果你想在任何文件中将只有10个逗号的一行改为只有9个逗号:

import re
commas = ",,,,,,,,,,\n,,,,,,,,,,\n,,,,,,,,,,"
print re.sub(r'^,{10}$', ','*9, commas, re.MULTILINE)

3
您可以使用“,”* n来生成一个包含n个逗号的字符串,从而提高代码可读性。例如,“,”* 10。 - Piotr Kalinowski
是的,计算逗号很烦人,但我认为在执行这种操作之后需要连接字符串(我经常在 .Net 和 Python 之间切换)。根据您的改进进行了修改。 - marr75

2

我会使用:

sed -i 's/,$//' file.csv

实际上,您可以在这里使用与vim相同的命令,因此sed -i 's/,$//' file.csv可以轻松地只引用最后一个逗号。 - Piotr Kalinowski
也许我误解了,我不想改变一行有九个逗号的代码。 - Eric Wilson

1

我真的很喜欢VIM正常命令。所以,如果你想从这个CSV文件中删除最后一列,我会这样做:

:%normal $F,D

换句话说,在该文件的每行(%)中执行以下过程(normal):
  1. $ - 跳到行尾;
  2. F, - 将光标移动到此行中以前的逗号;
  3. D - 从光标处删除直到行尾;
此外,这也可以与范围一起使用(从第1行到第20行):
:1,20normal $F,D

但是如果只有很多逗号而没有它们之间的数据,你可以简单地执行以下操作:

:%normal $X

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接