如何将txt文件中的数据按字母顺序排列为列表



txt文件

Zurich, Sun, (8, 52)
Auckland, Sun, (20, 52)
Barcelona, Sun, (8, 52)
Vancouver, Sun, (0, 52)
Beirut, Sun, (9, 52)
Athens, Sun, (9, 52)
Amsterdam, Sun, (8, 520)
Toronto, Sun, (2, 52)
Vienna, Sun, (8, 52)
Winnipeg, Sun, (1, 52)
Atlanta, Sun, (2, 52)
Anchorage, Sat, (23, 52)
Warsaw, Sun, (8, 52)
Ankara, Sun, (10, 52)
Washington DC, Sun, (2, 52)

代码:

list_aldskjfa = []
data = open('city_time.txt', 'r')
data = data.read()
list1 = []
for line in sorted(open('A1_cities_and_time.txt')):
list1.append(line)
print(line, end='')
print(list1)
output: ['Amsterdam, Sun, (8, 520)n', 'Anchorage, Sat, (23, 52)n', 'Ankara, Sun, (10, 52)n', 'Athens, Sun, (9, 52)n', 'Atlanta, Sun, (2, 52)n', 'Auckland, Sun, (20, 52)n', 'Barcelona, Sun, (8, 52)n', 'Beirut, Sun, (9, 52)n', 'Toronto, Sun, (2, 52)n', 'Vancouver, Sun, (0, 52)n', 'Vienna, Sun, (8, 52)n', 'Warsaw, Sun, (8, 52)n', 'Washington DC, Sun, (2, 52)', 'Winnipeg, Sun, (1, 52)n', 'Zurich, Sun, (8, 52)n']

正如你所看到的,列表按字母顺序排列正确,依次是阿姆斯特丹、安克雷奇、安卡拉等。问题是,整个列表是一个字符串,包括元组和日期。理想的输出看起来像[('Amsterdam','Sun',(8520((,('Anchorage','Sun',(8520((等]

似乎您需要做的是将列表中的每个条目拆分为一个元组。一个不错的解决方案是使用解析模块。这里有一种从头开始的方法。

def sep(line):
line = line.strip()
parts = line.split(', ',maxsplit = 2)
return tuple(parts[:2] + [eval(parts[2])])
output = list(map(sep,list1))

要在代码中包含文件读取,我们可以按以下步骤进行。

def sep(line):
line = line.strip()
parts = line.split(', ',maxsplit = 2)
return tuple(parts[:2] + [eval(parts[2])])
with open('list.txt','r') as f:
output = list(map(sep,f.readlines()))
output.sort()

请注意,此解决方案假定您将文本文件转换为csv(只需重命名结尾(。以下是将最后一个元素作为元组的替代实现:

import csv, ast
output = []
with open('path/to/city_time.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
for row in spamreader:
row = row[:2] + [",".join(row[2:])]
output.append(row)

output = sorted(output)
for o in output:
o[2] = ast.literal_eval(o[2].strip())
print(output)

输出:

[['Amsterdam', ' Sun', (8, 520)], ['Anchorage', ' Sat', (23, 52)], ['Ankara', ' Sun', (10, 52)], ['Athens', ' Sun', (9, 52)], ['Atlanta', ' Sun', (2, 52)], ['Auckland', ' Sun', (20, 52)], ['Barcelona', ' Sun', (8, 52)], ['Beirut', ' Sun', (9, 52)], ['Toronto', ' Sun', (2, 52)], ['Vancouver', ' Sun', (0, 52)], ['Vienna', ' Sun', (8, 52)], ['Warsaw', ' Sun', (8, 52)], ['Washington DC', ' Sun', (2, 52)], ['Winnipeg', ' Sun', (1, 52)], ['Zurich', ' Sun', (8, 52)]]

最新更新