【发布时间】:2020-05-31 15:59:21
【问题描述】:
我几乎是 Python 的新手,所以我的问题非常基础,可能很幼稚。
我正在尝试将 csv.reader 函数包含到自定义函数中,因为我认为我可能需要读取几种类型的带有各种分隔符和引号字符的类 csv 文本,并希望快速指定这些参数。
这是我尝试使用的代码。
import csv
def openFile(inputPath, newline='', delimiter=',', quotechar='"'):
with open(inputPath, newline='') as csvfile:
openedFile = csv.reader(csvfile, delimiter, quotechar)
return openedFile
inputPath = "unit_structure.csv"
ff = openFile(inputPath, delimiter=';')
print (ff)
我收到以下错误
在“openedFile = csv.reader(csvfile, delimiter, quotechar)”行出现错误,指出“预计最多 2 个参数,得到 3 个”。我从这里https://docs.python.org/3/library/csv.html 得到了这行代码,它在那里有 3 个参数。我不明白为什么我把它变成函数后它开始报错。
在“with open(inputPath, newline) as csvfile:”行上出现一个错误,指出“必须完全具有创建/读取/写入/追加模式之一,并且最多加一个”。这个我完全看不懂。
所以我有三个一般性问题。
首先。一般来说,我是否正在尝试做正确的事情?我不确定以这种方式对函数进行编码是否有效。 “csv.reader”已经是一个函数。也许我应该每次都使用“with open...”?
我不明白为什么会出现这些错误。也许我对代码结构的理解是错误的?我认为“with open”行是在指定地址打开文件的命令,“openedFile = csv.reader(...)”将其指定为 csv 然后“return opensFile”返回逗号分隔的文本本身.我怀疑我的这种解释可能是错误的,这就是为什么我不明白这些错误消息来自哪里。
如果我的一般理解是正确的,也许有人可以解释我在代码方面做错了什么?
【问题讨论】:
-
open()需要打开模式,例如 read 或 write。 -
我认为你做的不对。为什么要将一个函数包装到另一个函数中,所有原始函数都可以完全按照您的意愿行事。
-
m02ph3u5,据我了解,read是默认模式,所以不需要指定。我已将代码更改为“open(inputPath, mode='r', newline='')”,但没有任何改变。
-
Anwarvic,我正在考虑像“ff = openFile(inputPath, delimiter=';')”一样使用它,只根据需要更改分隔符。例如,我可以将表格输入到函数中,说明每个文件需要使用哪些分隔符。如果我不把它变成一个函数,我每次都需要编写整个代码块“打开......”等。基本上,我尽量保持干爽。