【问题标题】:Reading specific Column Values from CSV and pass it to urllib as parameter in Python从 CSV 读取特定的列值并将其作为 Python 中的参数传递给 urllib
【发布时间】:2015-07-31 19:53:21
【问题描述】:

我是 python 新手,正在尝试从 CSV 文件中读取特定列。我现在正在编辑问题。

这是 CSV 文件,例如:

one two three four
1    3    5    7
2    3    5    7

我写了一个非常简单的 Python 程序:(感谢下面的 Amrit 修改模式)。

import csv
with open('Activity_PSR.csv','rU') as csvFile:
    reader=csv.reader(csvFile,delimiter=',')
    for row in reader:
         print row[6]
csvFile.close()

我正在获取带有列标题的特定列。我想要只输出没有列标题的元素。

一旦我得到此列的输出,我想将它存储在一个变量中,并在 CURL 命令中使用它来发布数据。我相信 CURL 命令相当于 urllib。

这是 CURL POST 命令:

curl -v -X POST -d ‘{“Organization_Id___ORACO__Account_Order":300100051155060,"}' slcaf961.us.oracle.com:10615/crmCommonApi/resources/11.1.10/__ORACO__Order_c
 -H "Content-Type:application/vnd.oracle.adf.resourceitem+json" --user “sales_representative”

还有我打算使用的 urllib 代码:

import urllib2
data = '{“Organization_Id___ORACO__Account_Order":300100051155060"}'
url = 'slcad745.us.oracle.com:10618/crmCommonApi/resources/11.1.10/__ORACO__Order_c'
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
for x in f:
    print(x)
f.close()

在此处的数据字段中,我不想直接传递 300100051155060,而是想使用从上面的 CSV 获得的值并将其作为 Account-Id 传递。

如何传递我从 CSV 获得的值并将其作为参数传递给 JSON 有效负载? 需要存储我从 CSV 获得的值并将其存储在变量中并将其作为参数传递给 JSON 有效负载/数据并执行 POST 方法。 请求人们帮助我了解如何实现上述场景

【问题讨论】:

标签: python python-2.7 csv curl urllib2


【解决方案1】:

改用此代码:

import csv
with open('test.csv','r') as csvFile:
    reader=csv.reader(csvFile,delimiter=',')
    reader.next()   # if you don't want to print columns headers
    for row in reader:
         print row[2]
csvFile.close()

【讨论】:

  • 感谢 Amritbir 会尝试一下
  • 嗨 Amritbir 我怎样才能在没有标题的情况下获取列值。目前它打印带有列标题的列。如何忽略列标题并打印单独获取列值。
【解决方案2】:

这意味着一行在索引 2 上没有列。您需要创建一个守卫:

for row in csv_f:
    # make sure row has value on column 2 - otherwise skip row
    if len(row) > 2:
        print row[2]

您也可以使用异常,这在 Python 中被认为很便宜:

for row in csv_f:
    try:
        print row[2]
    except IndexError:
        print("skipping row %s" % str(row))

如果您知道所有行都需要有一个值,请确保您使用正确的分隔符,并使用读取器构造函数的 delimiter 参数。

另外,请确保您在 循环之后关闭文件:

for row in csv_f:
    # do stuff with 'row'
csv_f.close()

【讨论】:

  • 我想要做的就是将第 2 列的值作为输出并将其存储在一个变量中以供进一步使用。在这种情况下如何做到这一点。
  • 你能显示实际输入吗?如果你真的有 4 个值,这不会发生。
  • 确定我在这里上传了输入 CSV 我使用了
  • 如果您尝试指定分隔符并删除方言会怎样? csv_f = csv.reader(open('test.csv','rU'), delimiter=',')
【解决方案3】:

您应该考虑使用pandas。它有一个名为read_csv 的函数非常运行良好。在您的情况下,打印第三列的代码是

from pandas import *
csv_f=read_csv('test.csv', sep=r"\s*")
for a in csv_f['three']:
     print a

当然,它有很多功能,您应该检查一下,看看是否可以使用。

【讨论】:

  • 并没有真正的帮助...添加一些示例代码会很好:)
  • @heinst 是的,当您发表评论时,我正在编写它!请重新考虑你-1? :)
  • 嗨,Tom,如果你能给我一个关于如何使用 Pandas 完成我的场景的示例代码,那将非常有帮助。谢谢你的帮助
  • 熊猫对于 OP 的要求来说太过分了。 OP 无法理解诸如列表长度之类的东西,总有一天会导致另一个错误,无论是使用 pandas 还是纯 Python。一个更有帮助的答案将解释 OP 做错了什么。
  • @Jai 我修改了答案以做我认为你想要的,即打印列“三”。
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多