![](/img/trans.png)
[英]Replace the delimiter of first line from ',' to ';' in csv file by Python
[英]How to replace the first and the last ',' delimiter with '||' from a csv while leaving the others as it is?
我有一个 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||
. 见证明。
解释
--------------------------------------------------------------------------------
^ 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
蟒蛇代码:
import re
regex = r'^([^,]*),|,(?=[^,]*$)'
test_str = r'101, "Name1", "Designation1", "blah1", "Blah1", 20200914001'
subst = r'\1||'
print(re.sub(regex, subst, test_str))
结果: 101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
101|| "Name1", "Designation1", "blah1", "Blah1"|| 20200914001
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.