使用pandas.read_csv()与csv.reader()冲突-ValueError:对已关闭文件的I / O操作

马尔默搜索

我正在解析通过POST发送的csv文件,FormData()然后将其转换为JSON。当我使用一个软件包通过熊猫之前验证csv时,会出现问题。验证器功能完成了她的工作,然后,正常的熊猫读取显示了错误ValueError: I/O operation on closed file


if request.method == 'POST':
        content = request.form
        data_header = json.loads(content.get('JSON'))
        filename = data_header['data'][0]['name']
        
        # Here! starts the problem
        # validator = validCSV(validator={'header': ["id","type","name","subtype","tag","block","latitude","longitude","height","max_alt","min_alt","power","tia","fwl"]})
        # print(validator.verify_header(request.files[filename]))
        # then pseudo-code: if returned false, will abort(404)
        
        try:
            df = pd.read_csv(request.files[filename], dtype='object')
            dictObj = df.to_dict(orient='records')

如果我们将此问题跟踪到此软件包中,则将看到以下内容:

def verify_header(self, inputfile):
        with TextIOWrapper(inputfile, encoding="utf-8") as wrapper:
            header = next(csv.reader(wrapper))

似乎在通过打开和关闭文件时TextIOWrapper,不再允许Pandas使用来打开文件read_csv()但是,仅通过读取标头来制作文件的副本似乎是一种浪费,我喜欢使用的想法,csv.reader()因为在其他示例中显示,读取csv文件的效率要比熊猫高。

另一个软件包打开文件后,如何防止I / O错误?或者是一种简单有效的方式来验证csv,而无需使用大熊猫

马尔默搜索

解决方案是在读取第一行之后,seek()指向文件开头的指针。阅读的过程与大熊猫的阅读过程几乎相同。唯一明显的优点是它不依赖于导入/安装熊猫。

wrapper = StringIO(inputfile.readline().decode('utf-8'))
        header = next(csv.reader(wrapper,  delimiter=','))
        inputfile.seek(0,0)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用带有gzip压缩选项的pandas read_csv读取tar.gz文件?

使用熊猫read_csv读取此制表符分隔的文件时,行丢失

python:ValueError:对已关闭文件的I / O操作

熊猫:使用read_csv时如何获取已读取行的状态?

无法拆除熊猫使用的临时文件read_csv

大字串的pandas read_csv失败

带有多行标头XLS文件的Pandas read_csv

gzip压缩文件的pandas read_csv无法推断数字列类型

加快python pandas中的read_csv

熊猫,使用read_csv导入类似JSON的文件

flask ValueError:对已关闭文件的I / O操作

read_csv将不会打开.csv文件;而是必须使用csv.reader + defaultdict来解析一帧

如何为每个csv文件使用read_csv,即使它为空?蟒蛇熊猫

在R中使用read_csv导入多个csv文件

如何使用Dask read_csv读取第n行,以快速读取多个文件?

使用.read_csv读取csv文件的所有行

CSV阅读器对象获取ValueError:对已关闭文件的I / O操作?

Pandas read_csv fillna

文件名以字母 f 开头时 Pandas read_csv 错误

Pandas read_csv,重用跳过的行

ValueError:已关闭文件的 I/O 操作。-- For 循环

如何显示pandas read_csv()函数读取的csv文件名?

Pandas read_csv 上的类型错误

来自 Web URL 的 Pandas read_csv

Pandas read_csv() 和 dtype 疑惑

Pandas read_csv 读取文件中不存在的浮动值

使用 read_csv 在报价中读取带有 delim 的 CSV 文件

Pandas read_csv PermissionError: [Errno 1] 不允许操作:Jupyter Notebook

Pandas read_csv - 修改 Excel .csv 文件後標記數據時出錯