我是一个新手,试图将内容放入文件并从中制作一个列表。
我想打印"没有项目。"当文件为空时,"你有xxx。"(xxx是项目名称)当文件中只有一个字符串时(例如' banana')。
Content of my_file.txt:
banana,mango,peach,apple
with open("my_file.txt", "r+") as f:
items = f.read()
items = items.replace('\n', '').replace(' ', '')
items = items.split(",")
last_item = items[-1]
items_ex_last_item = items[:-1]
print("You have " + ', '.join(items_ex_last_item) + " and " + last_item + ".")
答案 0 :(得分:1)
list comprehension过滤掉空字符串。然后if
检查剩余列表是否为空。如果不为空,则检查长度并相应地打印。
with open("my_text_file.txt", "r") as f:
items = f.read()
items = items.replace('\n', '').replace(' ', '')
items = items.split(",")
items = [i for i in items if i]
if items:
if len(items) == 1:
print('You have {}'.format(items[0]))
if len(items) > 1:
last_item = items[-1]
items_ex_last_item = items[:-1]
print("You have " + ', '.join(items_ex_last_item) + " and " + last_item + ".")
else:
print("There is no item.")
items = [i for i in items if i]
相当于以下代码:
new_lst = []
for i in items:
if i:
new_lst.append(i)
items = new_lst
循环遍历items
列表中的所有元素,并检查if i
是否为True。如果是,那么它将append()
放入列表中。最后,它使items
引用new_lst
,有效地取代items
'旧内容。
if x:
如何运作(link):
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:False,None,所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,词典,集合和frozensets)。所有其他值都被解释为true。
答案 1 :(得分:1)
您可以使用next
来提升StopIteration
,在这种情况下会表示文件为空,并使用元组解包来获取项目,直到最后一项,最后一项,然后决定什么基于此打印,例如:
with open('my_file.txt') as fin:
try:
*items, last = next(fin).split(',')
if not items: print('You have', last)
else: print('You have', ', '.join(items) + ' and ' + last)
except StopIteration:
print('No items')
答案 2 :(得分:0)
from collections import Counter
from operator import itemgetter
with open('my_file.txt', 'rb') as f:
res = '\n'.join(
'You have {} ({})'.format(v, k)
for k, v in sorted(
Counter(f.read().strip().split(',')),
key=itemgetter(1, 0), reverse=True)
)
print res if res else 'There is no item'