Python从txt文件中读取

时间:2018-05-17 10:10:14

标签: python

我想从文本文件中将一堆名称拉入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是列表的开头)

我怎样才能使它像普通数组一样,每个名字都用引号括起来,用逗号分隔,外面是方括号。

4 个答案:

答案 0 :(得分:2)

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

-map 0:1

或者,如果您想将其保存为列表并按索引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 stuff始终都会被执行。尽管如此,这有点冗长,并且为文件对象编写此文件的更快捷方法是

file.close()

答案 1 :(得分:0)

文件内容是一个字符串,而不是字符串列表。

read()方法将整个文件作为一个字符串返回。如果你想要行,你必须将这个字符串拆分为“\ n”,这是文本文件中的换行符。

或者您可以使用readlines()方法,您将获得与读取和拆分相同的结果。

答案 2 :(得分:0)

我建议您使用with声明。 with语句用于使用上下文管理器定义的方法包装块的执行。这允许封装常见的try , except , finally使用模式以便于重用。

你可以这样做。

>>> path_to_file = "D:\(my user name)\Documents\names.txt"
>>> with open(path_to_file ,'r') as f:
...     [file.replace('\n','') for file in f]
or
...     [file.rstrip('\n') for file in f]

答案 3 :(得分:-2)

这是使用.txt文件的好方法:

from os.path import join, isfile

file = "file_name.txt"
path_to_folder = "C:\\Users\\You"
file_path = join(path_to_folder, file)

if isfile(file_path): # Returns True if the path is correct
    f = open(file_path, "r") # Open the file in read mode
    lines = f.readlines()    # Load all the lines in a list.
    f.close()                # Close the file

    # Take out the "\n" at the end of each lines that marks the line jump
    name = [line.strip("\n") for line in lines]

for i, n in enumerate(names):
    print ("Name {}: {}".format(i, n))

我添加了一些元素来向您展示可能性。