我想匹配并替换出现在CSV第一行的空格。
例如,我想用第一行替换空格' _':
"product id","Region","Region Code"
"888","North America","GEO123"
给予:
"product_id","Region","Region_Code"
"888","North America","GEO123"
这是我目前的做法:
f1 = open('file1', 'r')
f2 = open('newfile', 'w')
for line in f1:
f2.write(re.sub('([\s])+', '_', line))
f1.close()
f2.close()
替换整个文档中的所有空格。我如何调整它以便它只适用于第一行文本?
答案 0 :(得分:3)
\s
也匹配行尾的换行符。最好不要替换它!而且不需要自己做这么多。
with open('file1', 'r') as f1, open('newfile', 'w') as f2:
f2.write(re.sub('[ \t]+', '_', next(f1)))
f2.writelines(f1)
感谢with
,您不需要自己关闭文件(如果您有兴趣,请阅读“上下文管理器”)。 writelines
取代了你的循环。
答案 1 :(得分:1)
您可以使用枚举功能。
f1 = open('file1', 'r')
f2 = open('newfile', 'w')
for i,line in enumerate(f1):
if i == 0:
f2.write(re.sub('[\t ]+', '_', line))
else:
f2.write(line)
f1.close()
f2.close()
答案 2 :(得分:1)
f1 = open('file1', 'r')
f2 = open('newfile', 'w')
first_line = f1.readline()
f2.write(re.sub('([\s])+', '_', first_line))
for line in f1:
f2.write(line)
f1.close()
f2.close()
答案 3 :(得分:0)
快速而肮脏(并且未经测试),并从Stefan的回答中借鉴:
import re
with open('file1', 'r') as f1, open('newfile', 'w') as f2:
f2.write(re.sub("[\ ]+", "_", f1.read().strip(), f1.read().split("\n")[0].count(" "))