如何使用python处理CSV列中的右双引号?

2024-10-06 11:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

这是python脚本:

f = open('csvdata.csv','rb')
fo = open('out6.csv','wb')

for line in f:
    bits = line.split(',')
    bits[1] = '"input"'
    fo.write( ','.join(bits) )

f.close()
fo.close()

我有一个CSV文件,我用字符串“input”替换第2列的内容。不过,我需要先从专栏内容中获取一些信息。在

内容可能如下所示:

^{pr2}$

正如您所看到的,它有奇怪的数据类型,尤其是在行尾有两个双引号,而不是您所期望的一个。在

在替换列值之前,我需要提取XCORD和{}信息,比如XCORD = 2和{}。然后我想插入一个额外的列,名为X_Y,它表示(2_42)。在

如何修改我的脚本来做到这一点?在


Tags: csv脚本信息内容closeinputlineopen
1条回答
网友
1楼 · 发布于 2024-10-06 11:26:14

如果我正确理解您的问题,您可以使用一个简单的正则表达式来提取您想要的数字:

import re

f = open('csvdata.csv','rb')
fo = open('out6.csv','wb')

for line in f:
    bits = line.split(',')

    x_y_matches = re.match('.*X_CORD(\d+).*Y_CORD(\d+).*', bits[1])
    assert x_y_matches is not None, 'Line had unexpected format: {0}'.format(bits[1])
    x_y = '({0}_{1})'.format(x_y_matches.group(1), x_y_matches.group(2))

    bits[1] = '"input"'
    bits.append(x_y)

    fo.write( ','.join(bits) )

f.close()
fo.close()

请注意,只有当第2列的数字前面总是写着“X”和“Y”时,这才有效。如果有时它的格式稍有不同,则需要调整正则表达式以适应这种情况。我添加了assert,以便在发生这种情况时提供更有用的错误消息。在

您提到希望列命名为X\u Y,您的脚本似乎假定没有头,而我修改过的版本肯定会这样做。同样,如果有标题行,则需要对此进行调整。在

而且,是的,我同意其他评论者的看法,即使用csv模块读写csv文件会更干净。在

相关问题 更多 >