【问题标题】:Python: How to iterate over specific columns in rows in text filePython:如何迭代文本文件中行中的特定列
【发布时间】:2012-06-03 20:36:18
【问题描述】:

我想沿文本文件中的列迭代脚本,但忽略前 5 列。

目前,我的脚本逐行运行文本文件,评估第 6 列中的值。我希望它运行评估第 6 列、第 7 列、第 8 列等的所有行 我不想在脚本读取文件时评估每一行的每一列,而是要遍历整个文件评估列 n 然后重复列 n + 1

目前我有一个简单的:

for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")
    for col in row:

但我想指定它忽略前 5 列,因为它们不是目标(但仍需要作为文件中的信息)。

我想像 for col in row for range 6:20 这样的东西可能会起作用,但我是 python 初学者,不知道在 python 中表达这一点的正确方法。如果问题太混乱,请告诉我如何澄清问题。

提前感谢您的帮助。

最好的,

鲁巴尔

【问题讨论】:

  • 你可以使用csv模块和cols = row[5:]

标签: python loops


【解决方案1】:

如果您有一个列表row,那么row[a:b] 是从元素编号a 开始到但不包括元素编号b 的元素范围。

例如:

row = ['alpha', 'beta', 'gamma', 'delta', 'epsilon']

print row[2:4]

这个输出是

['gamma', 'delta']

所以在一个循环中你可以写:

for col in row[6:20]:
    foo()

或者,循环到列表的末尾

for col in row[6:]:
    foo()

【讨论】:

  • +1:考虑到 OP 的经验水平,比我的回答更有用
  • +1 表示简洁,@marshall 表示简洁并准确给出了我会给出的答案,艾略特表示可靠的解释。
  • 谢谢,应该可以解决 Eliot Ball。 foo() 是干什么用的?
  • foo() 的意思是“把你自己的代码放在这里”。 Foo 通常用作没有意义的占位符。
【解决方案2】:
for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")
    for col in fields[5:]:
        # process

【讨论】:

    【解决方案3】:

    不复制

    for line in Input:
        line = line.rstrip() 
        fields = line.split("\t")
        for index in range(5, len(fields)):
            #do_smth with fields[index]
    

    【讨论】:

    • 谢谢大家,所有这些cmets都很有用。我现在对如何创建这些迭代结构有了更深入的了解!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多