2016-03-06 125 views
4

我需要对文本文件中的每一行执行此操作,然后将其写入另一个文件。我需要删除第一个空格并用逗号替换它(,)。用逗号替换每行中的第一个空格

但是,我不希望这发生在线上的任何其他空白。下面是从输入文本文件中的一个片段:

Achilles Patroclus 
Achilles Triumph of Achilles in Corfu Achilleion 
Achilles Antilochus 
Achilles Hephaestus 
Achilles Shield of Achilles 
+1

太好了。你已经尝试了什么? – idjaw

+0

你的意思是说,在第一个单词“Achilles”之后放置','? – 2016-03-06 06:09:31

回答

6

你可以做这样的事情:

[",".join(line.split(" ", 1)) for line in lines] 
+0

这指出我在正确的方向!这里是我的解决方案.. 与开放(f_in,'r')作为fin: 与开放(f_out,'w')作为fout: 为fin: fout.write(“,”。join line.split(“”,1))) – lsch91

2

嘛我不是一个Python程序员,但我会尝试有助于从正则表达式的单点解决方案看法。

你正在做的是确定第一个字和空白之后它。遵循正则表达式来完成这项工作。

正则表达式:使用(^\b\w*\b)(\s)

标志:

  • g全局搜索。

  • m用于多行搜索。

说明:

  • (^\b\w*\b)将捕获行的第一个字。

  • (\s)将在第一个单词之后捕获空白。您也可以选择使用?:以内的非捕获组,因此它变成(?:\s)或者根本不捕获它。

更换做到:

  • \1,更换匹配的内容。这将会把捕获的第一组,因为它是和,代替whitespace

Regex101 Demo

1

使用字符串方法replace(old, new, [count])的。如果给出可选的参数计数,则仅替换第一个计数事件。

with open("file-path") as fin, open("new_file_path", "w") as fout: 
    for line in fin: 
     fout.write(line.replace(' ', ',', 1) 
1

使用re.sub^([^\s]*)\s+

>>> s 
'Achilles Triumph of Achilles in Corfu Achilleion' 

>>> re.sub(r'^([^\s]*)\s+', r'\1, ', s) 
'Achilles, Triumph of Achilles in Corfu Achilleion' 
1

那么存在re.sub第四个参数,它可以像

re.sub(" ", ",", x, cnt=1) 

x使用的是字符串,cnt表示多少更换你想要

相关问题