获取文件内容并列出清单

时间:2015-03-09 11:53:33

标签: python

我是一个新手,试图将内容放入文件并从中制作一个列表。

我想打印"没有项目。"当文件为空时,"你有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 + ".")

3 个答案:

答案 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'