gpt4 book ai didi

Python:如何将文本目录读入列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:34 25 4
gpt4 key购买 nike

我正在尝试使用 gensim 进行主题建模。从我查看模块的文档可以看出,gensim 期望以列表的形式接收其输入,列表中的每个项目都是一个文本:

documents = ["Human machine interface for lab abc computer applications",
"A survey of user opinion of computer system response time",
"The EPS user interface management system"]

我在目录中有一组文本,我想将其与 gensim 一起使用,因此我需要将这些文件读入列表。这些文本中的每一个,其中一些由多行组成——文本的大小从不到 100 个单词到稍微超过 1000 个单词——都需要成为列表中的一个项目。如果需要剥离换行符,我想我可以弄清楚该怎么做,但是将它嵌入循环是我失败的地方......完全。 (事实上​​ ,我周末会带自己去上学,但我经常把那部分搞砸。)

我找到了关于如何将单个文件读入列表的各种有用信息——按行或按单词或其他方式——但我不知道如何将一系列文本文件读入列表一系列字符串都包含在一个列表中——这是重要的一点:

textfile1.txt
textfile2.txt

需要成为

list = ['contents of textfile1', 'contents of textfile2']

这是我目前所拥有的:

# get to the files, open an empty list

import glob

file_list = glob.glob('./texts' + '/*.txt')
documents = []

# Now to read the files into a list:

for file in file_list:
documents.append()

print documents

print documents 显然是一个一次性的行,所以我可以检查我的工作,你可以看到我并没有在循环中走得太远。

最佳答案

with 不是循环。它只运行一次包含的代码。在此上下文中,它保证打开的文件将在 with block 结束后关闭,即使出现错误也是如此。

查看目录中所有文本文件的一种方法是使用 os.listdir():

import os

documents = []

for f in os.listdir():
if f[-4:] == '.txt':
documents.append(f[:-4])

或者作为理解:

documents = [f[:-4] for f in os.listdir() if f[-4:] == '.txt']

然后您将拥有一个名为documents列表,其中包含(当前工作)目录中的文件名。例如,包含文件 hello.txtworld.txt 的文件夹将导致 documents 包含字符串 'hello''world'

请记住,完成此操作后,您需要打开文件。建议使用 with 结构。

contents = []
for document in documents:
with open(document+'.txt', 'r') as f:
contents.append(f)

这将产生一个包含内容列表。每个元素都是一个 file 对象,可以逐行迭代或以其他方式处理(如 contents[0] = contents[0].read()用包含文件内容的字符串替换 file 对象)。由于 with 构造,无法理解这一点。


要回答您编辑过的问题(这看起来确实比原来的问题更合理),您可以创建一个包含每个文件夹文本文件的字符串内容的列表,如下所示:

import glob

file_list = glob.glob('./texts' + '/*.txt')

# create document list:
documents = []
for filename in file_list:
with open(filename, 'r') as f:
documents.append(f.read()) # option 1, to get a direct string
# documents.append(f.readlines()) # option 2, to get a list of lines
# documents.append([item.strip() for item in f.readlines()]) # option 3, to get a list of lines with no linefeeds
# documents.append(f.read().replace('\n', ' ') # option 4, to get a direct string, linefeeds replaced with spaces

假设当前工作目录中有一个目录 texts,文件 first.txt 包含 'hello\nworld' 和文件 second .txt 包含 'hi\npeople',这四个选项中的每一个都会为 documents 创建不同的结果,如下所示(每个语句都会生成一个 list 等价于其对应的选项):

  1. documents = ['hello\nworld', 'hi\npeople']
  2. documents = [['hello\n', 'world'], ['hi\n', 'people']]
  3. 文档 = [['hello', 'world'], ['hi', 'people']]
  4. documents = ['hello world', 'hi people']

关于Python:如何将文本目录读入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com