首页 > 解决方案 > 从由制表符分隔的字符串创建列表

问题描述

我想从保存在文件中的以下字符串创建一个列表:

neurovaultcols_050817   1073
neurovaultcols_050817   1606

这是代码:

repo_dataset=open("G:\\My Drive\\single.txt")
k=[]
for x in repo_dataset:           
    x.strip().strip("").split("\t")       
    k.append(x)
for b in k:
    print(b[0])

现在,当我使用 时print(b[0]),我希望看到“aneurovaultcols_050817”。当我使用 时print(b[1]),我想看到 1073 和 1606。但我只看到第一个字母:

n
n

我做错了什么?

标签: python-3.x

解决方案


改成:

with open("G:\\My Drive\\single.txt", 'r') as f:
    k = [line.strip().split('\t') for line in f]

for b in k:
    print (b[0], b[1])

问题在于:

for x in repo_dataset:           
    x.strip().strip("").split("\t")       
    k.append(x)

基本上这是说“对于x打开的文件 ( ) 中的行 ( repo_dataset),剥离并拆分选项卡上的行”。这将返回一个列表,但您捕获它,然后将整行附加到k. 如果我们分解它:

for x in repo_dataset:
    # lets say 'x' is currently 'neurovaultcols_050817   1073'       
    x.strip().strip("").split("\t")
    # 'neurovaultcols_050817   1073'.strip() removes leading & trailing characters
    # 'neurovaultcols_050817   1073'.strip("") is not necessary
    # 'neurovaultcols_050817   1073'.split('\t') returns ['neurovaultcols_050817', '1073']
    #    but you don't store the list that gets returned so it does nothing essentially
    k.append(x)
    # k.append('neurovaultcols_050817   1073') is what happens

所以之后,这k看起来像:

k = ['neurovaultcols_050817   1073', 'neurovaultcols_050817   1606']

所以for循环'neurovaultcols_050817 1073'成为第一个b。因此,调用b[0]代表'n'字符串的开头!

对于发布的原始代码,更改非常简单(尽管我推荐我的代码):

repo_dataset=open("G:\\My Drive\\single.txt")
k=[]
for x in repo_dataset:           
    y = x.strip().split("\t") # change    
    k.append(y) # change
for b in k:
    print(b[0])

推荐阅读