首页 > 解决方案 > 有没有一种更简洁的方法来编写它而无需在插入字符串之前转换为字符串?

问题描述

我对 python 很陌生,所以玩得很好,但是我正在尝试编写一个程序来帮助我编写在不同国家/地区要做的事情的列表。它应该问什么国家,做什么,然后把那个活动放在国家标题下。文本文件是这样列出的:

Bolivia:
- salt pans
Ecuador:
Peru:
Spain:

这段代码确实有效,但我有一种强烈的感觉,有一种简单的方法可以做到这一点。

f = open('travel.txt', 'r+')
contents = f.readlines()
contents = ''.join(contents)
country = input('Country: ')
length = len(cnty)+2
activity = input('Activity: ')
index = contents.find(country+':\n') + length
content = contents[:index] + '- ' + activity + '\n' + contents[index:]
g = open('travel.txt', 'w')
g.write(content)

我曾尝试附加文本文档,但据我了解,它总是附加到末尾。还尝试f.seek()在某个索引处使用和写入,但这似乎会覆盖,并且无法找到阻止它的方法。

为任何帮助干杯:)

标签: pythonpython-3.x

解决方案


你可以做的是像这样创建dict of country一个list of activities-

lines = f.readlines()

current_country = ''
countries = {}

for country in lines:
    if ":" in country:
        current_country = country.replace(":", "").replace("\n", "").strip()
        countries[current_country] = []
    else:
        countries[current_country].append(country.replace("-", "").strip())

您将以这种方式获得的数据将是一个字典。例如,如果数据是 -

Bolivia:
- salt pans
- black
Ecuador:
- green
- white
Peru:
- blue
- black
Spain:
- grey

您将拥有一本字典 -

{'Spain': ['grey'], 'Bolivia': ['salt pans', 'black'], 'Peru': ['blue', 'black'], 'Ecuador': ['green', 'white']}

现在要抢一个国家,你需要做的就是——

countries['Bolivia']

会给你一份西班牙的活动清单

['salt pans', 'black']

而且由于它是一个字典,它只需要O(1)检索一个国家的活动列表


推荐阅读