仅在python中使用正则表达式从第一行选择空格

时间:2015-05-08 13:49:23

标签: python regex csv

我想匹配并替换出现在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()

替换整个文档中的所有空格。我如何调整它以便它只适用于第一行文本?

4 个答案:

答案 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(" "))