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