我有一个文本文件,其中包含以下内容
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的丢弃函数。
答案 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.