大家好,亲爱的Python爱好者们。
这篇文章是关于非常简单的文本清理。这里没有花哨或复杂的内容。
这可能不完全是一个实用的脚本,但它将帮助你理解一些东西是如何工作的,比如如何访问文件和将文本分解为单词。
在这篇文章中,我将讨论如何清理符号并将每个单词保留在单独的行中。
例如,我们有这个文本文件,想要去掉符号
!@#<h2>**The Qu!ck Br0wn F0x Jumps Over The L@zy D0g.**</h2>
(Did you see that?) Th!s is a sample $tring with **m!xed** cAsE, num3r@ls (like 123),
让我们来理清逻辑,分解问题,然后一步一步地进行。
1.首先,我们需要一个空列表来添加清理后的单词。
2.然后我们需要访问文本文件,这意味着打开文件。
3.Python 是逐行读取文件的,而不是逐字读取。因此,我们首先需要遍历每一行,然后遍历每一个单词,最后遍历每一个字符。
(行 → 单词 → 字符)
4.所以当我们遍历每一个字符时,我们需要检查它是否是符号。
如果是,那么它应该被去掉;如果不是,那么我们就保留它。
现在让我们通过代码片段一步一步地实现这个逻辑:
1.让我们先创建一个空列表:
words = []
我们还需要创建一个我们识别出的不希望出现在文本中的字符列表。
symbols = ['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']
2.现在是访问和打开文件的时候
with open("text.txt") as file:
3.在第3步中,我们讨论了Python如何逐行读取文件。
因此,为了实现这一点并遍历每个字符,我们需要使用嵌套循环
。
遍历行:
with open("text.txt") as file:
for line in file:
遍历每行的单词:
这一部分有点棘手,因为我们不能仅仅说:
for word in line:
这里介绍一下 split()
方法的用法:
split()
的功能:
它将一个字符串分割成一个较小字符串的列表。
with open("text.txt") as file:
for line in file:
for word in line.split():
for line in file
将获取每一行。for word in line
将从这一行中获取每一个单词。假设这是我们的文本:
"Hello, World!"
for word in line
的作用是获取每一个单词,而不是一个完整的单词。所以基本上它不会打印出 “hello”,而是打印出如下内容:
H
e
l
l
o
我们不希望这样。这就是为什么我们需要 split()
方法来告诉 Python:“好的,从字符串中切割出整个单词,然后继续下一个单词,而不是逐个字符打印出来,然后再继续下一个单词。”
以下是一个示例:
text = "Hello, World!"
for word in text:
print(word)
vs
text = "你好,世界!"
for word in text.split():
print(word)
第一个输出将是:
H
e
l
l
o
第二个将打印出:
Hello,
World!
现在我们已经将每个单词作为整体,那么我们可以进入下一部分,检查每个单词中的符号。
但在我们像这样遍历每个字符之前:
for char in word:
我们需要在这个 for loop
外部创建一个空字符串,以便每当一个字符不是符号时,它就会被存储到那个变量中。
我们称之为 cleaned_word
cleaned_word = ""
以下是您提供的英文技术文章内容的中文翻译:
with open("text.txt") as file:
for line in file:
for word in line.split():
cleaned_word = ""
请注意,代码部分保持不变,翻译主要集中在代码的上下文中。
现在我们可以遍历每个字符,检查是否有符号:
cleaned_word = ""
for char in word:
if char not in symbols:
cleaned_word += char
现在我们要做的就是获取 cleaned_word
并将其添加到 words
列表中:
final_word = cleaned_word.lower()
words.append(final_word)
现在让我们将整个代码块放在一起:
with open("text.txt") as file:
for line in file:
for word in line.split():
cleaned_word = ""
for char in word:
if char not in symbols:
cleaned_word += char
final_word = cleaned_word.lower()
words.append(final_word)
最后一步是从 words
列表中获取每个 word
:
for word in words:
print(word)
您还可以过滤清理后的单词,仅打印出长度大于5个字符的单词:
final_word = cleaned_word.lower()
if len(final_word) > 5:
words.append(final_word)
with open("text.txt") as file:
for line in file:
for word in line.split():
cleaned_word = ""
for char in word:
if char not in symbols:
cleaned_word += char
final_word = cleaned_word.lower()
if len(final_word) > 5:
words.append(final_word)
for word in words:
print(word)
下次见