gpt4 book ai didi

python - Python 3 中的 CSV .count?

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:49 25 4
gpt4 key购买 nike

我正在将我的 python 脚本切换到 python 3,但我在移植我的 csv 评估代码的一部分时遇到了问题。

在 python 2.7.5 中,这段代码工作得很好:

filename=askopenfilename()

with open(filename, 'rb') as Order:
reader = csv.reader(Order, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
OrderList = []
first = Order.next()
if (first.count("Web ID") == 1):
OrderList.append("Digi-key")
OrderList.append(first)

现在我已经将 Order.next() 行更改为 next(Order) 所以它可以使用 python 3,尽管我似乎找不到 python 3 的等效项的 if (first.count("Web ID") == 1):

我已经查看了 Python 3 的 CSV 模块文档,我可能遗漏了一些东西,而且我没有尽最大努力去弄清楚它。

我要评估的部分是这样的(更改数字以维护隐私):

Web ID,Access ID,Salesorder Number,Shipping Method,Payment Method,
49488634,84901,37873472,U.S. Postal Service Priority Mail* (2-3 Day Delivery to most US addresses)(order by 8:00 PM CT),Foo,

Shipping Address
...

当前错误是这样的:

TypeError: Type str doesn't support the buffer API

有什么想法吗?

最佳答案

count 方法由字符串或列表实现。在你的例子中,你在一个字符串上调用它,你通过调用它的 next 方法从文件对象中检索它。在 Python 3 上,当你以二进制模式打开一个文件时,你会得到一个可迭代的字节串,而不是字符串。类型 bytes 也实现了 count,但是你只能计算字节串中字节串的出现次数,否则你会得到一个 TypeError:

In [1]: b'hello'.count(b'el')
Out[1]: 1

In [2]: b'hello'.count('el')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-df699ac18654> in <module>()
----> 1 b'hello'.count('el')

TypeError: Type str doesn't support the buffer API

无论如何,您可能不得不以文本模式打开文件以进行 CSV 解析,因为csv.reader documentation说:

csv.reader(csvfile, dialect='excel', **fmtparams)

Return a reader object which will iterate over lines in the given csvfile. csvfile can be any object which supports the iterator protocol and returns a string each time its __next__() method is called — file objects and list objects are both suitable.

请注意我添加的对“字符串”一词的强调。您应该以文本模式打开文件,最好使用 newline='',如链接页面中所建议的那样。

顺便说一句,您可以将 first = next(order) 更改为 first = next(reader)。这样您将拥有一个字符串列表(一行),并且计算其中某个字符串的出现次数可能更可靠。

关于python - Python 3 中的 CSV .count?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com