作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图弄清楚如何打开一个文件,将文件中的所有字母变成小写,然后取出所有标点符号。我尝试了一些在网上和书中看到的东西,但我似乎无法弄清楚。
import string
def ReadFile(Filename):
try:
F = open(Filename)
F2=F.read()
except IOError:
print("Can't open file:",Filename)
return []
F3=[]
for word in F2:
F3=F2.lower()
exclude = set(string.punctuation)
F3= ''.join(ch for ch in F3 if ch not in exclude)
return F3
Name = input ('Name of file? ')
Words = ReadFile(Name)
print (F3)
给定一个句子,例如,
Then he said, "I'm so confused!".
成为
then he said im so confused
最佳答案
您的代码的问题在于最后一行:
print (F3)
F3
是函数内局部变量的名称。您无法从这里访问它。
但是您可以访问该变量中的相同值,因为函数返回了该值,并且您将其存储在Words
中。
所以,只需这样做:
print(Words)
现在,您的代码可以运行了。
<小时/>话虽如此,它还可以改进。
最重要的是,看看这部分:
F3=[]
for word in F2:
F3=F2.lower()
for word in F2:
实际上循环遍历 F2
中的每个字符,因为这就是字符串的工作方式。如果你想逐字查看,则需要执行类似 for word in F2.split() 的操作:
同时,在循环内部,您每次通过循环都会重新分配F3
,并且永远不会对先前的值执行任何操作,因此整个事情最终会成为一种非常奇特(且缓慢)的方式只做最后一个作业。
幸运的是,最后一个赋值 F3=F2.lower()
将整个字符串 F2
小写,这正是您想要做的,所以无论如何它都能解决。这意味着您可以将所有三行替换为:
F3=F2.lower()
<小时/>
您还应该始终关闭打开的文件。由于这可能很棘手(例如,在您的函数中,您必须记住在成功和错误情况下关闭它),因此最好的方法是自动使用 with
子句。替换这两行:
F = open(Filename)
F2=F.read()
与:
with open(Filename) as F:
F2=F.read()
<小时/>
之后,除了使用非 PEP-8 样式以及如果文件很大时会出现性能问题之外,您的代码实际上没有任何问题。
关于python - 文件操作: How to take out Punctuation and Capital letters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199924/
我是一名优秀的程序员,十分优秀!