如何使用列表理解从 .txt 文件中过滤出列表?
How can I filter out a List from a .txt file using list comprehension?
我正在参加 Python class,但我想不出带回家的测验。我正在使用 IDLE 编写代码。
我们必须将名为 names.txt 的文件加载到列表中。该文件包含以下内容:
Joe Smith
000000
Jeff Mitchell
xxxxxxx
Benjamin Grant
12346
我需要过滤掉包含“xxxxxxx”或数字的行。我正在尝试通过以下代码使用列表理解:
> names = open(r'C:\Users\eesqu\Documents\Python\names1.txt','r')
> names_contents = names.read()
> filtered_names = [n for n in names_contents if n !='xxxxxxx']
> names.close()
> print(filtered_names)
但是,当我打印 filtered_names 输出时,名称没有被过滤,它们没有以下拉格式出现,而是如下所示:
['J', 'o', 'e', ' ', 'S', 'm', 'i', 't' , 'h', '\n', '0', '0', '0', '0', '0', '0', '\n', 'J', 'e', 'f', 'f', ' ', 'M', 'i', 't', 'c', 'h', 'e', 'l', 'l', '\n', 'x', 'x', 'x', 'x', 'x' , 'x', 'x', '\n', 'B', 'e', 'n', 'j', 'a', 'm', 'i', 'n', ' ', 'G', 'r', 'a', 'n', 't', ' \n', '1', '2', '3', '4', '6', '\n']
我在这里做错了什么?是否可以同时过滤掉“xxxxxxx”和数字?
感谢大家对我代码入门的支持。
您可以使用readlines
读取数据和列表理解来过滤掉xxx
ss = '''
Joe Smith
000000
Jeff Mitchell
xxxxxxx
Benjamin Grant
12346
'''.strip()
with open('names.txt','w') as f: f.write(ss) # write data file
###############################
with open('names.txt') as f:
lns = f.readlines()
xx = [ln.strip() for ln in lns if ln.strip() != 'xxxxxxx']
print('\n'.join(xx))
输出
Joe Smith
000000
Jeff Mitchell
Benjamin Grant
12346
names_contents
是一个字符串,因此您在这行代码 n !='xxxxxxx'
中将字符串与 char 进行比较。因此,首先您必须将字符串拆分为代表每一行的字符串列表。试试这个
lines = names_contents.split("\n")
filtered_names = [n for n in lines if n !='xxxxxxx']
你快到了
names = open(r'C:\Users\eesqu\Documents\Python\names1.txt','r')
name_contents = names.readlines() # list of lines
filtered_names = [n for n in name_contents if (not n.isnumeric() or n != 'xxxxxxx']
不过,在此处发帖之前可能需要使用您最喜欢的搜索引擎进行查找。这是一个很琐碎的问题。
您要删除的值
filter_vals = 'xxxxxxx\n'
读取文件
with open('64797525.txt') as f:
out = [i.strip() for i in f.readlines() if i not in filter_vals] # remove what's in the list
print(out)
['Joe Smith', '000000', 'Jeff Mitchell', 'Benjamin Grant', '12346']
我正在参加 Python class,但我想不出带回家的测验。我正在使用 IDLE 编写代码。
我们必须将名为 names.txt 的文件加载到列表中。该文件包含以下内容:
Joe Smith
000000
Jeff Mitchell
xxxxxxx
Benjamin Grant
12346
我需要过滤掉包含“xxxxxxx”或数字的行。我正在尝试通过以下代码使用列表理解:
> names = open(r'C:\Users\eesqu\Documents\Python\names1.txt','r')
> names_contents = names.read()
> filtered_names = [n for n in names_contents if n !='xxxxxxx']
> names.close()
> print(filtered_names)
但是,当我打印 filtered_names 输出时,名称没有被过滤,它们没有以下拉格式出现,而是如下所示:
['J', 'o', 'e', ' ', 'S', 'm', 'i', 't' , 'h', '\n', '0', '0', '0', '0', '0', '0', '\n', 'J', 'e', 'f', 'f', ' ', 'M', 'i', 't', 'c', 'h', 'e', 'l', 'l', '\n', 'x', 'x', 'x', 'x', 'x' , 'x', 'x', '\n', 'B', 'e', 'n', 'j', 'a', 'm', 'i', 'n', ' ', 'G', 'r', 'a', 'n', 't', ' \n', '1', '2', '3', '4', '6', '\n']
我在这里做错了什么?是否可以同时过滤掉“xxxxxxx”和数字?
感谢大家对我代码入门的支持。
您可以使用readlines
读取数据和列表理解来过滤掉xxx
ss = '''
Joe Smith
000000
Jeff Mitchell
xxxxxxx
Benjamin Grant
12346
'''.strip()
with open('names.txt','w') as f: f.write(ss) # write data file
###############################
with open('names.txt') as f:
lns = f.readlines()
xx = [ln.strip() for ln in lns if ln.strip() != 'xxxxxxx']
print('\n'.join(xx))
输出
Joe Smith
000000
Jeff Mitchell
Benjamin Grant
12346
names_contents
是一个字符串,因此您在这行代码 n !='xxxxxxx'
中将字符串与 char 进行比较。因此,首先您必须将字符串拆分为代表每一行的字符串列表。试试这个
lines = names_contents.split("\n")
filtered_names = [n for n in lines if n !='xxxxxxx']
你快到了
names = open(r'C:\Users\eesqu\Documents\Python\names1.txt','r')
name_contents = names.readlines() # list of lines
filtered_names = [n for n in name_contents if (not n.isnumeric() or n != 'xxxxxxx']
不过,在此处发帖之前可能需要使用您最喜欢的搜索引擎进行查找。这是一个很琐碎的问题。
您要删除的值
filter_vals = 'xxxxxxx\n'
读取文件
with open('64797525.txt') as f:
out = [i.strip() for i in f.readlines() if i not in filter_vals] # remove what's in the list
print(out)
['Joe Smith', '000000', 'Jeff Mitchell', 'Benjamin Grant', '12346']