如何在Python中将txt文件解析为列表
我离Python的新手不远了,我想解析一个文件 原样: 该文件包含:城市、街道编号、街道类型和街道名称 这个顺序总是一样的,城市后面跟一个逗号 我现在已经这样做了:如何在Python中将txt文件解析为列表,python,python-3.x,Python,Python 3.x,我离Python的新手不远了,我想解析一个文件 原样: 该文件包含:城市、街道编号、街道类型和街道名称 这个顺序总是一样的,城市后面跟一个逗号 我现在已经这样做了: #!/usr/bin/python3.4 import readline import sys try: f = open(sys.argv[1]) except:
#!/usr/bin/python3.4
import readline
import sys
try:
f = open(sys.argv[1])
except:
sys.exit()
lines = f.readlines()
print(lines)
我得到这个输出:
['Paris, 458 boulevard Saint-Germain\n', 'Paris, 343 boulevard Saint-Germain\n', 'Marseille, 343 boulevard Camille Flammarion\n', 'Marseille, 29 rue Camille Desmoulins\n', 'Marseille, 1 chemin des Aubagnens\n']
似乎是要做的事情,但现在我有两个问题:
map
函数和split
,strip
str
对象方法(如果可以按单个字符进行拆分)来完成
with open(sys.argv[1]) as f:
lines = f.readlines()
split = lambda x: x.replace(',', '').split()
addresses_lists = map(split, lines)
若要拆分的条件更复杂,那个么使用模块来解析所需的模式。当然你需要。(编辑)
实际上,你不需要任何额外的LIB。这是一个简单的操作,可以使用列表理解或生成器或map
函数和split
,strip
str
对象方法(如果可以按单个字符进行拆分)来完成
with open(sys.argv[1]) as f:
lines = f.readlines()
split = lambda x: x.replace(',', '').split()
addresses_lists = map(split, lines)
若要拆分的条件更复杂,那个么使用模块来解析所需的模式。您肯定需要。有各种数据结构可以存储这些数据。您可以将每行中的数据存储在包含(城市名称、街道编号、街道类型、街道名称)的元组中,然后将每个元组存储到列表中。一个稍微好一点的选择是将数据存储到字典列表中。这里有一个简短的演示
fname = 'citydata.txt'
addresses = []
keys = ('city', 'num', 'type', 'name')
with open(fname) as f:
for line in f:
line = line.rstrip()
city, line = line.split(',', 1)
num, street_type, street_name = line.split(None, 2)
t = (city, num, street_type, street_name)
print(t)
addresses.append(dict(zip(keys, t)))
print()
for row in addresses:
print(row)
print()
for row in addresses:
print(row['num'])
输出
('Paris', '458', 'boulevard', 'Saint-Germain')
('Paris', '343', 'boulevard', 'Saint-Germain')
('Marseille', '343', 'boulevard', 'Camille Flammarion')
('Marseille', '29', 'rue', 'Camille Desmoulins')
('Marseille', '1', 'chemin', 'des Aubagnens')
{'city': 'Paris', 'num': '458', 'type': 'boulevard', 'name': 'Saint-Germain'}
{'city': 'Paris', 'num': '343', 'type': 'boulevard', 'name': 'Saint-Germain'}
{'city': 'Marseille', 'num': '343', 'type': 'boulevard', 'name': 'Camille Flammarion'}
{'city': 'Marseille', 'num': '29', 'type': 'rue', 'name': 'Camille Desmoulins'}
{'city': 'Marseille', 'num': '1', 'type': 'chemin', 'name': 'des Aubagnens'}
458
343
343
29
1
您可以使用各种数据结构来存储这些数据。您可以将每行中的数据存储在包含(城市名称、街道编号、街道类型、街道名称)的元组中,然后将每个元组存储到列表中。一个稍微好一点的选择是将数据存储到字典列表中。这里有一个简短的演示
fname = 'citydata.txt'
addresses = []
keys = ('city', 'num', 'type', 'name')
with open(fname) as f:
for line in f:
line = line.rstrip()
city, line = line.split(',', 1)
num, street_type, street_name = line.split(None, 2)
t = (city, num, street_type, street_name)
print(t)
addresses.append(dict(zip(keys, t)))
print()
for row in addresses:
print(row)
print()
for row in addresses:
print(row['num'])
输出
('Paris', '458', 'boulevard', 'Saint-Germain')
('Paris', '343', 'boulevard', 'Saint-Germain')
('Marseille', '343', 'boulevard', 'Camille Flammarion')
('Marseille', '29', 'rue', 'Camille Desmoulins')
('Marseille', '1', 'chemin', 'des Aubagnens')
{'city': 'Paris', 'num': '458', 'type': 'boulevard', 'name': 'Saint-Germain'}
{'city': 'Paris', 'num': '343', 'type': 'boulevard', 'name': 'Saint-Germain'}
{'city': 'Marseille', 'num': '343', 'type': 'boulevard', 'name': 'Camille Flammarion'}
{'city': 'Marseille', 'num': '29', 'type': 'rue', 'name': 'Camille Desmoulins'}
{'city': 'Marseille', 'num': '1', 'type': 'chemin', 'name': 'des Aubagnens'}
458
343
343
29
1
您熟悉Python吗?第一个问题:-如何为每个类型创建一些列表:---它已经是一个地址列表了。你还想要什么?我对它很陌生,但我有编程的基本知识,所以我想我可以检查一下并理解它。。我希望也许我忘了告诉你们,这个项目的目标是让我们从那个著名的.txt文件中得到的单词基本上自动完成。你真的想要一份门牌号的清单吗?例如,一个街道名称字典作为关键字,每个街道名称都有一个门牌号列表可能很有用。您熟悉Python吗?第一个问题:-如何为每种类型创建一些列表:---它已经是一个地址列表了。你还想要什么?我对它很陌生,但我有编程的基本知识,所以我想我可以检查一下并理解它。。我希望也许我忘了告诉你们,这个项目的目标是让我们从那个著名的.txt文件中得到的单词基本上自动完成。你真的想要一份门牌号的清单吗?例如,一个街道名称字典作为关键字,每个街道名称都有一个门牌号列表,这可能很有用。请注意,这并不会去掉城市名称的逗号。@PM2Ring,是的,它可以在使用map的更复杂的lambda之后进行处理。不必了,这两个答案都对我帮助很大,因为我对Python真的很陌生!我会尽我所能收集所有可能的信息!再次感谢大家@PM2Ring,但您有一个很好的观点和更明显的语法。这对学习有好处;)请注意,这并没有去掉城市名称的逗号。@PM2Ring,是的,它可以在使用map的更复杂的lambda之后或使用它进行处理。没有必要,这两个答案对我帮助很大,因为我对Python非常陌生!我会尽我所能收集所有可能的信息!再次感谢大家@PM2Ring,但您有一个很好的观点和更明显的语法。这对学习有好处;)多好的回答啊!谢谢,这真的帮助我理解了这个语言。最后一个问题是:我目前正在学习C和C++,我想知道是否有一种与C或C++一样的“错误处理”。我的意思是检查open()或其他函数的返回?非常感谢你的帮助!在Python中使用异常处理-请参阅@thomasbeudet:很高兴您喜欢我的答案。一旦你得到足够的分数,别忘了给它投票。:)是的,Python有异常处理。请参见Python在比C/C++更高的级别上工作。例如,我使用了
和
来打开文件。如果with
块中出现错误,则会自动关闭文件。在C语言中,你需要做更多的显式错误检查。多好的答案啊!谢谢,这真的帮助我理解了这个语言。最后一个问题是:我目前正在学习C和C++,我想知道是否有一种与C或C++一样的“错误处理”。我的意思是检查open()或其他函数的返回?非常感谢你的帮助!在Python中使用异常处理-请参阅@thomasbeudet:很高兴您喜欢我的答案。一旦你得到足够的分数,别忘了给它投票。:)是的,Python有异常处理。请参见Python在比C/C++更高的级别上工作。例如,我使用了和
来打开文件。如果with
块中出现错误,则会自动关闭文件。在C语言中,您需要进行更多的显式错误检查。