你知道如何将字符串列表拆分为不同的变量吗



我是python的初学者,我有一个问题可能很简单。我有一个";文件.txt";,其中原则上可以有n个串。

> file.txt
John
Rafa
Marta
... 
n

这与一起加载到程序中

with open('/media/names.txt') as f:
lines = f.read().splitlines()

现在,我从csv加载一个数据帧,它有一列(名称为"Identifier"(,其中包含很多名称。

Registration = pd.read_csv('/media/Registration.csv', 
sep='t', header=0)

目标是为每个变量分别找到n个字符串。例如,在这种情况下,我对列表中的第一个数据进行了处理:

names_1 = Registration[Registration['Identifier'].str.contains(lines[1])]
print(names_1)

只保留具有";约翰;作为标识符。然而,我正试图创建n个数据帧,因为在";文件.txt";列表

names_1 = Registration[Registration['Identifier'].str.contains(lines[1])]
names_2 = Registration[Registration['Identifier'].str.contains(lines[2])]
names_3 = Registration[Registration['Identifier'].str.contains(lines[3])]
names_n = Registration[Registration['Identifier'].str.contains(lines[n])]

但我有点被卡住了,我不知道怎么做这个循环。有人帮我吗?谢谢

从理论上讲,问题的答案是局部变量存储在可通过函数locals((访问的字典中。因此,可以完全按照要求在循环中生成变量。

for i, line in enumerate(lines):
locals()[f'names_{i}'] = Registration[Registration['Identifier'].str.contains(line)]

然而,仅仅因为你能做到并不意味着你应该这样做,以这种方式生成变量通常不是一个好主意。

问问你自己,你将如何访问第n个变量?您正在走一条将使您的数据难以处理的道路。更好的方法是使用像字典或列表这样的数据结构来方便地跟踪它

names = []
for line in lines:
names.append(Registration[Registration['Identifier'].str.contains(line)])

请注意,第一个索引是0,而不是1。

Python列表索引以0开头。

试试这样的for循环:

for i in range(len(lines)):
names = Registration[Registration['Identifier'].str.contains(lines[i])]

但那个么你们需要保持names的值。可能在列表中:

name_list = []
for i in range(len(lines)):
names = Registration[Registration['Identifier'].str.contains(lines[i])]
name_list.append(names)
print(name_list)

试试这个!享受编码!

最新更新