在csv

时间:2019-05-28 17:02:29

标签: python bash pandas csv text

我有一个.csv文件,我需要执行以下操作:对于每行,从该行的 end 开始,一定数量的指定字符出现时应用引号引起来。

我将举一个例子,使自己更加清晰。考虑以下csv行:

gentlemen, this is a block of text. Thanks!,1,0,0,1

我想用引号引起来,在第四次出现逗号之后,从结尾开始,将出现的行的片段括起来。因此,它应该变为:

"gentlemen, this is a block of text. Thanks!",1,0,0,1

我想用bash,纯python或pandas来做。

3 个答案:

答案 0 :(得分:2)

使用sed:

$ sed -E 's/(.*)((,.*){4})/"\1"\2/' <<< 'gentlemen, this is a block of text. Thanks!,1,0,0,1'
"gentlemen, this is a block of text. Thanks!",1,0,0,1

这使用两个捕获组。重要的部分是(,.*){4}:这是逗号的四个实例,后跟任何东西。因为第一组贪婪地匹配,所以第二组将匹配行中的最后四个逗号。

然后替换将第一组括在双引号中,并打印未修改的第二组。

答案 1 :(得分:1)

在python中:

line = r'gentlemen, this is a block of text. Thanks!,1,0,0,1'
num_commas = 4
comma_count = 0
for c in reversed(line):
    from_end += 1
    if c == ',':
        comma_count += 1
    if comma_count >= num_commas:
        break
line[:-from_end]
# 'gentlemen, this is a block of text. Thanks!'

其余的都是学术性的。

答案 2 :(得分:0)

[SerializeField]
private GameObject toggleGO;

public void OnToggleClick() {
    ToggleGameObject(toggleGO);
}