[英]How to replace the first and the last ',' delimiter with '||' from a csv while leaving the others as it is?
I have a CSV file:我有一个 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
replace each line like below:替换每一行,如下所示:
101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
similar structure goes to the rest of the lines/records as well.类似的结构也适用于其余的行/记录。
My code replaces all of the delimiters.我的代码替换了所有分隔符。
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)
Thanks in advance.提前致谢。
Use用
^([^,]*),|,(?=[^,]*$)
Replace with \\1||
替换为
\\1||
. . See proof .
见证明。
Explanation解释
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
[^,]* any character except: ',' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
, ','
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
, ','
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
[^,]* any character except: ',' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of
the string
--------------------------------------------------------------------------------
) end of look-ahead
Python code : 蟒蛇代码:
import re
regex = r'^([^,]*),|,(?=[^,]*$)'
test_str = r'101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'
subst = r'\1||'
print(re.sub(regex, subst, test_str))
Result: 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
结果:
101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
. 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
。
You could split on the first ( maxsplit=1
from the left) and last ( maxsplit=1
from the right) commas and join the results, eg:您可以拆分第一个(从左边开始
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.