我想从文本文件中将一堆名称拉入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是列表的开头)
我怎样才能使它像普通数组一样,每个名字都用引号括起来,用逗号分隔,外面是方括号。
答案 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))
我添加了一些元素来向您展示可能性。