python文件中的空格更正

python文件中的空格更正,python,Python,我想写一个函数,它接受一个文件并(更正)删除标点“()[]{}.”、:;!?$”之后或之前的额外空格,或者在必要时添加空格。 例子: word。word应更改为word。单词 单词(word)单词应改为单词(word)单词 我写的代码不起作用(也许我应该使用正则表达式,但我不知道如何使用) 我写了一个新的代码,但它同样没有纠正空格 import re def c (file): with open ('c.txt')as f1: for line in f1:

我想写一个函数,它接受一个文件并(更正)删除标点“()[]{}.”、:;!?$”之后或之前的额外空格,或者在必要时添加空格。 例子: word。word应更改为word。单词 单词(word)单词应改为单词(word)单词

我写的代码不起作用(也许我应该使用正则表达式,但我不知道如何使用)

我写了一个新的代码,但它同样没有纠正空格

import re

def c (file):
    with open ('c.txt')as f1:
        for line in f1:
           result = re.sub(r'\s([?.!(){}[]:;,"](?:\s|$))', r'\1', line)
           f2 = open ('zzzzz.txt', 'a')
           f2.write(result)
           print(result) 

我终于有时间玩了。我不得不重做几次,但是 我会这样做的。正如你所指出的,你是编程新手,我将 描述代码中涉及的一些概念。我想会的 一开始有点难,但我相信它值得去发现它的所有力量 Python支持这个具体示例

面向对象编程 您在以下程序中发现的第一个概念由 关键字
class
。有一个, 如果你不熟悉这个概念,你应该阅读。我不去 进入细节,因为上面的链接更好。但是为了与 接下来的几章,这里是一些基本概念

class
关键字用于定义类,方法与
def
关键字定义函数。其中包含的代码不会被执行 直到它被明确地称为。类包含变量和函数 (称为方法)并形成用于创建对象的蓝图。让我们使用一个 例子。我可以定义一个类
Cake
蛋糕
风味
切片
, 它们将是变量。该类包含一个方法
take\u slice
,该方法将 减少可用的
切片数

根据这个蓝图,我可以烤几块蛋糕,它们都有不同的颜色 口味和片数。正如你想象的那样,如果我打电话给
在屏幕上取一片

芝士蛋糕,我不会影响巧克力蛋糕

莱克辛 转换文本 在一套
令牌中
。标记是一段有意义的文本 作为一个单位(例如单词、运算符、标点符号等)。结合 用于分析语法并获得意义或操纵语法的标记 文本通常不在lexer的范围内,而留给另一部分 通常称为解析器。这就是
\u标记化的内容
函数只需“吃”文本以生成标记,无需进一步
理解一个令牌在另一个令牌之后或之前的含义

发电机 如果你不熟悉这个概念,你可能会在这里发现 下面的代码很难理解。 关于这个话题。但是过于简化了(因此不精确),这就是我想要的 他会说:

你已经知道函数了。当您调用一个函数时,函数的代码是 它将返回一个值,将控件返回给调用方。 如果函数有多个
return
语句,则会遇到第一个语句 将终止该函数

现在想象一种函数,当你调用它时,它会执行一些 编码并返回一个值,但当您再次调用它时,它将恢复 执行最后停止的代码并返回新值,依此类推 直到某种处理完成。更准确地说,让我们这样说 当你调用这个奇怪的函数时,你实际上得到了一个对象,一个特殊的 一个。要获得这个奇怪函数的实际“返回值”,您必须 在对象上应用操作符。每次你这样做,你就会得到 函数生成的下一个值。给你!你有发电机。 “函数”是生成器,返回的对象是

>>定义简单范围(n):
i=0
而i>>rng=simple_range(3)#调用生成器会产生迭代器
>>>接下来(rng)#通过询问*迭代器来访问值*
0
>>>下一个(rng)
1.
>>>下一个(rng)
2.
>>>下一个(rng)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
下一个(rng)
停止迭代
>>> 
现在值得注意的是,Python的
for
循环在迭代器上运行,因此 使用发电机非常方便:

>>rng2=简单范围(5)
>>>对于rng2中的i:
打印(“下一页:”,i)
下次:0
下一个:1
下一个:2
下一个:3
下一个:4
密码! 好了,概念够了,结果在哪里

#/usr/bin/env python
#-*-编码:utf-8-*-
进口(哦,是的:)
类格式化程序:
"""
清除标点符号周围文本空白的格式化程序,
引号、括号、括号或花括号。不应有
标点符号或结束分隔符前的空格,但至少是空格
在它们之后。在开始分隔符之前至少应有一个空格
引号是成对处理的。第一次遇到
第一个是开始的,第二个是结束的。
`strip`:如果设置,则删除起始和结尾的空格
`keependline`:如果已设置,则如果字符串包含结束换行符,
即使设置了“strip”,它也将被保留。
`reduce_whitespace`:如果设置,则将多个空白合并为一个
单个:单个空格,除非链中包含制表符
在这种情况下,将保留该选项卡。
"""
#lexer将理解的标记列表:名称及其关联的正则表达式
代币=[
(“word”,重新编译(r“[\w\-\ud]+”),
(“点”,重新编译(r“[\,;:!?$”),
(“打开”,重新编译(r“[(\[\{]”),
(“关闭”,重新编译(r“[)\]\}]”),
(“白色”,重新编译(r“\s+”),
(“引用”,重新编译(r'))
]
判定元件
import re

def c (file):
    with open ('c.txt')as f1:
        for line in f1:
           result = re.sub(r'\s([?.!(){}[]:;,"](?:\s|$))', r'\1', line)
           f2 = open ('zzzzz.txt', 'a')
           f2.write(result)
           print(result)