Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将文本文件中的多个空格更改为$sign_Python - Fatal编程技术网

在python中将文本文件中的多个空格更改为$sign

在python中将文本文件中的多个空格更改为$sign,python,Python,我尝试将文本文件中的多个空格更改为$符号 我尝试了这个方法,它可以工作,使所有的空格都变成1个空格,但如果找到的空格超过2,我需要读取所有的文本文件,并将其转换为$sign fin = open("data.txt", "rt") fout = open("out.txt", "wt") for line in fin: fout.write(' '.join(line.split())) fin

我尝试将文本文件中的多个空格更改为$符号

我尝试了这个方法,它可以工作,使所有的空格都变成1个空格,但如果找到的空格超过2,我需要读取所有的文本文件,并将其转换为$sign

fin = open("data.txt", "rt")
fout = open("out.txt", "wt")

for line in fin:
    fout.write(' '.join(line.split()))
    
fin.close()
fout.close()

您可以使用像
{2,}
(注意前导空格)这样的正则表达式来查找2个或更多的空格和
re.sub
带有
$
的空格

>>> import re
>>> s = "string with spaces  and  double  and   more    spaces"
>>> re.sub(" {2,}", "$", s)
'string with spaces$and$double$and$more$spaces'
如果要将它们替换为相同数量的
$
,可以使用带有回调的
re.sub

>>> re.sub(" {2,}", lambda m: "$" * len(m.group()), s)
'string with spaces$$and$$double$$and$$$more$$$$spaces'
应用于您的代码,以下内容应该可以正常工作(使用第一个版本):


您可以使用像
{2,}
(注意前导空格)这样的正则表达式来查找2个或更多的空格和
re.sub
带有
$
的空格

>>> import re
>>> s = "string with spaces  and  double  and   more    spaces"
>>> re.sub(" {2,}", "$", s)
'string with spaces$and$double$and$more$spaces'
如果要将它们替换为相同数量的
$
,可以使用带有回调的
re.sub

>>> re.sub(" {2,}", lambda m: "$" * len(m.group()), s)
'string with spaces$$and$$double$$and$$$more$$$$spaces'
应用于您的代码,以下内容应该可以正常工作(使用第一个版本):


它工作得很好,但我如何在文件上实现它来做同样的事情。@DoomraiqRaiq只是把
re.sub(…)
放进你的
fout.write(…)
而不是
''。join(…)
我按照你说的做了,但是当我改变fin而不是s来读取文件时,它会给我错误返回(编译(模式,标志).sub(repl,string,count)TypeError:应为字符串或类似字节的对象。@tobias_k@DoomraiqRaiq不要将文件作为一个整体传递,而要传递单独的行;请参阅我的编辑。它可以使用一些空格,有些保留原样。在第1行中,所有内容都很完美,但其他行中只有最后一个空格改为$,但第一个空格并没有。@tobias_kit工作得很好,但如何操作我实现它是为了在文件上做同样的事情。@DoomraiqRaiq只是把
re.sub(…)
放进你的
fout.write(…)
而不是
'.join(…)
我按照你说的做了,但是当我改变fin而不是s来读取文件时,它会给我错误返回_compile(模式、标志).sub(repl、字符串、计数)TypeError:应为字符串或类似字节的对象。@tobias_k@DoomraiqRaiq不要将文件作为一个整体传递,而要传递单独的行;请参阅我的编辑。它使用一些空格,有些保留原样。在第1行中,所有内容都很完美,但其他行中只有最后一个空格改为$,但第一个空格并没有。@tobias_k