Python 如何将csv中的第一个和最后一个“,”分隔符替换为“| |”,同时保持其他分隔符不变?
我有一个CSV文件:Python 如何将csv中的第一个和最后一个“,”分隔符替换为“| |”,同时保持其他分隔符不变?,python,regex,Python,Regex,我有一个CSV文件: 101, "Name1", "Designation1", "blah1", "Blah1", 20200914001 102, "Name2", "Designation2", "blah2", "Blah2", 20200914002 103, "Name3", "Designati
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,在我当前的要求中,这对我很有帮助。谢谢。此解决方案还附带警告,如果第一个或最后一个字段是包含逗号的带引号的字符串,则此解决方案无效。此解决方案还附带警告,如果第一个或最后一个字段是包含逗号的带引号的字符串,则此解决方案无效。