遍历文件文件夹

2024-10-01 22:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学院的一位教授的办公室工作,他让我通读一整堂课的论文,试图抓住那些剽窃的人,所以我决定用python编写一个程序,查看所有论文中所有六个单词的短语,并将它们进行比较,看是否有超过200个匹配短语。六个词的短语可以是。。。在

我吃了一个土豆,它很好吃。应该是:

我吃了一个土豆

吃了一个土豆

一个土豆,很好吃。在

我的代码是正确的

import re

def ReadFile(Filename):
    try:
        F = open(Filename)
        F2=F.read()
    except IOError:
        print("Can't open file:",Filename)
        return []
    F3=re.sub("[^a-z ]","",F2.lower())
    return F3
def listEm(BigString):
    list1=[]
    list1.extend(BigString.split(' '))
    return list1


Name = input ('Name of file? ')
Words = ReadFile(Name)

Words2= listEm(Words)
index1=0
index2=6
new_list=[]

while index2 <= len(Words2):
    new_list.append(Words2[index1:index2])
    index1 += 1
    index2 +=1

print (new_list)

我能够为文件夹中的一个文件创建所有的六个单词短语,但是对于如何在文件夹中创建每个文件以及如何进行比较感到困惑。任何和所有的帮助是非常感谢和感谢第一学期的计算机科学专业。在


Tags: namerenewreturndefopenfilename单词
1条回答
网友
1楼 · 发布于 2024-10-01 22:38:00

您可以枚举目录中的文件,如下所示:

import glob

for file in glob.glob('*.txt'):  #choose files will be found in this case anything.txt
    with open(file) as f:
        #code...

关于glob的文档可以在这里找到:Glob PyDoc

你需要浏览所有的文件,并建立一个所有短语的记录。尽管你需要跟踪哪些短语来自何处,因为在第二次检查文件时,第一次检查中记录的短语将在第二次检查的同一个文件中找到。你需要一种方法来只查找来自其他文件的短语。在

此代码将创建名为badphreages\ux.txt的文件,其中包含一个短语列表:

^{pr2}$

例如,如果“b.txt”包含“我吃了一个土豆,它很好”。生成的文件将包含:

I ate a potato and it
ate a potato and it was
a potato and it was good.

从这里,您可能需要删除标点符号。从这一点上,你只需要检查每个文件的内容,任何不良短语_名称.txt文件名在哪里!=正在检查的文件的当前名称。在

说明

for file in list(glob.glob('*.txt')):

是一个泛型for循环,遍历的结果中包含的所有值

list(glob.glob('*.txt'))

for循环的语法是Python Doc

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]

在本例中,目标列表是“文件”,表达式“列表”是list(glob.glob('*.txt')。else/suite部分是可选结构, 如果for循环在它的代码套件中没有终止,则将执行代码块“suite”。例如

for i in range(10):
    pass
else:
    print("No errors!")

产量:

>>> 
No errors!

同时

for i in range(10):
    break
else:
    print("No errors!")

不会输入else子句,因此不会输出任何内容。在

现在,glob.glob('*.txt')在做什么?模块“glob”中的这个方法将查找目录中与模式匹配的所有文件,在本例中是:*.txt(*代表任何内容)。我们使用list()将其转换为列表的原因是glob.glob()是一个生成器。由于我们在循环中创建了一个文件,glob.glob稍后将提取它。一、 e

  1. 打开文件a.txt
  2. 生成文件bad_phrases_a.txt
  3. glob.glob可能会返回bad_phrases_a.txt
  4. 生成文件bad_phrases_bad_phrases_a.txt

如您所见,此过程将导致无限递归,因此我们希望在开始创建*bad_phrases*文本文件之前耗尽生成器。list()将获得glob.glob('*.txt')返回的所有值,并将它们放入如下列表:['a.txt','b.txt','c.txt']。然后我们使用for循环依次检查每个循环。在

with open(file) as f:

此代码打开当前文本文件,其路径存储在file(来自for循环)中,并将其分配给变量f。我们使用f将文本写入.txt文件本身。使用with语法是一种构造,在这种情况下,一旦我们处理完文件,它就会关闭它。您可以在此处阅读有关with语法的更多信息With Python Doc。在

with open('badphrases_%s' % file,'w+') as bad_list:

与上面类似,我们打开一个文件作为bad\uu list。'badphrases_%s' % file是字符串替换。它将%后面的值按顺序放入前面的字符串中。在本例中,file表示我们当前正在查看的文件的名称。在

text = f.read().split()

f.read()将内容从文件中提取到内存中,并将其存储为字符串。.split()方法创建文件中所有单词的列表,即:['ate','there',...]。在

bad_list.write('\n'.join(( ' '.join(text[i:i+6]) for i in range(0,len(text)-5,1) )))

上面的主要部分是这一切发生的地方。write()将文本输出到文件。向外工作:

( ' '.join(text[i:i+6]) for i in range(0,len(text)-5,1) )

是生成器表达式。它类似于列表理解,即: [x for x in range(5)]将产生{}。join()方法接受一个iterable并将内容连接在一起,并且在每个元素之间放置一个字符,因此'*'.join(['a','b','c']) == "a*b*c"。在本例中,我们要选择六个单词text[i:i+6]并将它们组合成一个字符串,其中每个单词用空格' '分隔。我们对i的值从0到文本中的单词数-5都这样做,并且在每一步我们都将i增加1。在

这将创建要打印到文件中的行的列表。所以我们使用'\n'.join(...)将每一行合并成one字符串,其中每行由新行分隔(用“\n”表示)。在

相关问题 更多 >

    热门问题