- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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.txt
和 world.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
等价于其对应的选项):
documents = ['hello\nworld', 'hi\npeople']
documents = [['hello\n', 'world'], ['hi\n', 'people']]
文档 = [['hello', 'world'], ['hi', 'people']]
documents = ['hello world', 'hi people']
关于Python:如何将文本目录读入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114934/
我是一名优秀的程序员,十分优秀!