【问题标题】:Using delimiter in Python to cut out middle section在 Python 中使用分隔符剪掉中间部分
【发布时间】:2016-03-07 12:22:58
【问题描述】:

我有一个以逗号分隔的文本文件,包含五个不同的列,但我只想取回第一列和第四列。

当我使用split 函数时,它只是拆分所有内容,我不知道如何获取它,因此它只会占用第一列,然后跳到第四列。

这是我尝试组织的数据示例:

11.332,2,2,-465,0.928621379033569

我想从这里得到 11.332-465 并忘记其余部分

【问题讨论】:

  • “当我使用拆分功能时,它只是拆分所有内容” - 这就是它应该做的。 “我不知道如何获取它,它只会占用第一列然后跳到第四列” - 为什么不之后再这样做呢? for row in data: first, fourth = row[0], row[3]。如果使用 3.x,您可以使用一些巧妙的解包技巧,参见例如repl.it/Bte9

标签: python python-2.7 csv delimiter


【解决方案1】:

有几种方法可以做到这一点。

您的问题标有csv。您可以使用 csv 模块解析 CSV 数据:

import csv

with open('file.csv') as f:
    for row in csv.reader(f):
        print(row[0])    # the first field
        print(row[3])    # the third field

对于您的示例数据,这将打印:

11.332 -465

csv.reader() 可能是最好的方法,但是,另一种方法是使用带有_ 的元组解包来表示忽略的字段:

line = '11.332,2,2,-465,0.928621379033569'
first, _, _, fourth, _ = line.split(',')
print(first)
print(fourth)
# 11.332
# -465

当然,没有什么能阻止您将所有字段绑定到变量,只需将 _ 替换为有意义的变量名即可。

或者,您可以拆分整行,然后通过下标提取出您想要的字段:

line = '11.332,2,2,-465,0.928621379033569'
data = '11.332,2,2,-465,0.928621379033569'.split(',')
print(data[0])
print(data[3])
# 11.332
# -465

或者你可以使用operator.itemgetter(结合元组解包):

from operator import itemgetter

fields = itemgetter(0, 3)
first, fourth = fields(line.split(','))
print first
print fourth
# 11.332
# -465

【讨论】:

  • 感谢@mhawke,这里有很多不同的选项。这些正在用于将它们打印出来,但是一旦我尝试将值读入变量而不是打印它们,我就会不断得到列表索引超出范围错误
  • @Darby_321:你是如何分配他们的?上面的每个示例都显示了在打印之前分配给变量的值。您的代码或情况有何不同?
  • @Darby_321:您应该使用您正在使用的代码更新您的问题。
  • 对不起,我现在意识到我的问题出在我正在读取的文件中,而不是在代码中。在文件中,一行有 BEGIN_SESSION 并且没有逗号分隔的值,这会引发错误。我知道工作不会那么难
【解决方案2】:

我想明白了

for line in eda:
    print (line.split(',')[0])
    print (line.split(',')[3])

这给了我我需要的两个结果,而忘记了其余的结果

【讨论】:

  • 你在做同样的工作两次 - split 一次,然后索引。
  • @jonsharpe 我该怎么做,因为我实际上再次遇到了麻烦,因为我试图将它们读入变量而不是打印它们但是对于第二行拆分它是给我一个超出范围的列表索引??
  • ...stuff = line.split(','); print(stuff[0], stuff[3])?
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 2022-01-26
  • 2022-08-10
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多