Python 如何将csv中的第一个和最后一个“,”分隔符替换为“| |”,同时保持其他分隔符不变?

Python 如何将csv中的第一个和最后一个“,”分隔符替换为“| |”,同时保持其他分隔符不变?,python,regex,Python,Regex,我有一个CSV文件: 101, "Name1", "Designation1", "blah1", "Blah1", 20200914001 102, "Name2", "Designation2", "blah2", "Blah2", 20200914002 103, "Name3", "Designati

我有一个CSV文件:

101, "Name1", "Designation1", "blah1", "Blah1", 20200914001
102, "Name2", "Designation2", "blah2", "Blah2", 20200914002
103, "Name3", "Designation3", "blah3", "Blah3", 20200914003
104, "Name4", "Designation4", "blah4", "Blah4", 20200914004
105, "Name5", "Designation5", "blah5", "Blah5", 20200914005
按如下方式更换每一行:

101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
其他行/记录也有类似的结构

我的代码将替换所有分隔符

data = ""
with open('firstCSV.csv', 'r') as file:
    data = file.read().replace(',', '||').replace(' ', '')

with open("first_Out.csv", "w") as out_file:
    out_file.write(data)
提前感谢。

使用

^([^,]*),|,(?=[^,]*$)
替换为\1 | |。看

解释

:

结果:101 |名称1,名称1,blah1,blah1 | 20200914001。

使用

^([^,]*),|,(?=[^,]*$)
替换为\1 | |。看

解释

:


结果:101 | | Name1,Designation1,blah1,blah1 | | | | 20200914001。

您可以在第一个maxsplit=1的左逗号上拆分,最后一个maxsplit=1的右逗号上拆分,并合并结果,例如:

>>> line = '101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'

>>> first, rest = line.split(',', maxsplit=1)
>>> rest, last = rest.rsplit(',', maxsplit=1)
>>> '||'.join((first, rest, last))
'101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001'

您可以在第一个maxsplit=1(从左开始)和最后一个maxsplit=1(从右开始)上使用逗号进行拆分,并合并结果,例如:

>>> line = '101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'

>>> first, rest = line.split(',', maxsplit=1)
>>> rest, last = rest.rsplit(',', maxsplit=1)
>>> '||'.join((first, rest, last))
'101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001'

典型的正则表达式警告适用于此处:小心使用。在提供的示例中,这将按预期工作。在CSV文件中,如果您的数据在第一列或最后一列的引号字符串“Doe,John”中有逗号,您将遇到意想不到的惊喜…谢谢@Ryszard,在我当前的要求中,这对我很有帮助。谢谢。典型的正则表达式警告适用于这里:小心使用。在提供的示例中,这将按预期工作。在CSV文件中,如果您的数据在第一列或最后一列的引号字符串“Doe,John”中有逗号,您将遇到意想不到的惊喜…谢谢@Ryszard,在我当前的要求中,这对我很有帮助。谢谢。此解决方案还附带警告,如果第一个或最后一个字段是包含逗号的带引号的字符串,则此解决方案无效。此解决方案还附带警告,如果第一个或最后一个字段是包含逗号的带引号的字符串,则此解决方案无效。