python-3.x - 从由制表符分隔的字符串创建列表
问题描述
我想从保存在文件中的以下字符串创建一个列表:
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
我做错了什么?
解决方案
改成:
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])
推荐阅读
- html - Jenkins Active Choices Reactive Reference Parameter 不适用于格式化的 HTML 输入文本框
- python - 使用新代码更新 Docker 容器
- objective-c - 目标 c 中的 XCTKVOExpectation 使用示例
- vba - 用于组合列单元格中不同值的 Excel 宏
- regex - 在使用正则表达式的行之前删除
- sql-server - Sql Server JDBC 不适用于 Wildfly AS
- android - 如何将蓝牙自动连接添加到当前代码
- ruby-on-rails - 使用重新文件保存多个文件不起作用
- python - yagmail如何隐藏收件人
- wordpress - Wordpress 站点管理员无法发布