使用file-python3设置功能

时间:2017-12-21 01:00:56

标签: python-3.x

我有一个文本文件,其中包含以下内容

Credit

Debit

21/12/2017

09:10:00

编写python代码将文本转换为集合并丢弃\ n。

with open('text_file_name', 'r') as file1:
    same = set(file1)
    print (same)
    print (same.discard('\n'))

用于第一次打印语句打印(相同)。我得到了正确的结果:

{'Credit\n','Debit\n','21/12/2017\n','09:10:00\n'}

但是对于第二个印刷语句print (same.discard('\n'))。我得到了结果 None

任何人都可以帮我弄清楚为什么我会得到无。我正在使用same.discard('\n')放弃集合中的\n

注意: 我试图了解关于set的丢弃函数。

3 个答案:

答案 0 :(得分:1)

discard方法只会删除集合中的元素,因为您的集合不仅包含\n它不能丢弃它。您正在寻找的是一个地图,从每个元素中删除\n,如下所示:

set(map(lambda x: x.rstrip('\n'), same))

将返回{'Credit', 'Debit', '09:10:00', '21/12/2017'}作为集合。此示例使用map内置函数,它将第一个参数应用于集合中的每个元素。我们map用法中的第一个参数是lambda x: x.rstrip('\n'),它只是删除每个字符串右侧出现的\n

答案 1 :(得分:0)

discard仅在set中显示给定元素时才会删除它。 此外,该函数不会返回任何值,因为它会更改从中运行的set

with open('text_file_name', 'r') as file1:
    same = set(file1)
    print (same)
    same = {elem[:len(elem) - 1] for elem in same if elem.endswith('\n')}
    print (same)

答案 2 :(得分:-1)

set中有4个元素,其中没有一个是换行符。

在这种情况下使用list会更常见,因为它保留了订单,而不保证集合保留顺序,而且它会丢弃重复的行。也许你有理由。

您似乎在寻找rstrip('\n')。考虑以这种方式处理文件:

    s = {}
    with open('text_file_name') as file1:
        for line in file1:
            s.add(line.rstrip('\n'))
    s.discard('Credit')
    print(s) # This displays 3 elements, without trailing newlines.