首页 > 解决方案 > Python 从 txt 文件中读取

问题描述

我想将一堆名称从文本文件中提取到 python (v3.6.5) 中。

我的文本文件是纯文本(file.txt),每个名字都在一行

Name 1
Name 2
Name 3 etc.

在 python 中,我已验证该路径适用于以下代码

path_to_file = "D:\(my user name)\Documents\names.txt"
file_object = open(path_to_file, "r")
print(file_object)

这将返回控制台中文件的路径,这意味着它正在工作。


现在我想把名字放到一个列表中。

所以

names = fileobject.read()
print(names)

返回

Name 1
Name 2
Name 3 etc.

但它不像一个普通的列表(即。

["name 1", "name 2", "name 3"] etc

所以如果我让它叫第二个名字

print(names[1])

它会打印

a

如名字的第二个字母(记住 0 是列表的开头)

我怎样才能使它像一个普通的数组,其中每个名称都用引号分隔,用逗号分隔,方括号在外面。

标签: python

解决方案


这里有很多不良做法的答案。最好的方法是意识到您可以直接迭代文件对象

path_to_file = r"D:\(my user name)\Documents\names.txt"
with open(path_to_file) as file_object:  # this is a safe way of opening files
    for line in file_object:
        print(line)

或者,如果您想将其保存为列表并按索引访问,请names[0]使用:

with open(path_to_file) as file_object:  # this is a safe way of opening files
    names = [line.rstrip('\n') for line in file_object]  # remove \n at end

print(names[0]) # --> name 1
print(names[1]) # --> name 2

关于with. 不要做

file = open(path)
# do stuff

因为您有损坏数据的风险。您必须关闭您的文件。然而

file = open(path)
# do stuff
file.close()

也很危险,因为#do stuff可能会失败,在这种情况下文件将永远不会关闭。一种方法是使用

try:
    file = open(path)
    # do stuff
finally:
    file.close()

无论在哪里发生什么# do stufffile.close()总是会执行。不过,这有点冗长,为文件对象编写它的更快方法是

with open(path) as file:
    # do stuff

推荐阅读