gpt4 book ai didi

python - csvkit & django a.k.a. 使用 csvkit 作为模块而不是从命令行

转载 作者:行者123 更新时间:2023-11-28 22:03:02 27 4
gpt4 key购买 nike

我需要在 Django 应用中处理一些 csv 文件。
我听说过 csvkit,它看起来很酷。
github page

想尝试一下,但我不知道如何将 csvkit 作为模块使用。具体来说,我想使用 CSVJSON 实用程序。我需要向它传递一个 csv 文件(希望还有一些其他参数),但不太清楚该怎么做。
CSV JSON Docs

我想向实用程序传递一个上传的 csv 文件,上传的文件可以在内存中(如果足够小)或在临时存储区域中。 CSVJSON 看起来需要一个文件路径或流。如果有人能告诉我我需要对上传的文件做些什么才能使 CSVJSON 能够使用它,那将是一个很好的奖励。

在 django 1.3 中,我计划在 form_valid 方法中完成这项工作。

希望有一些 python 技能的人可以帮助我展示我需要做什么。谢谢

最佳答案

您可以使用以下代码导入 CSVKit JSON 类:

from csvkit.utilities.csvjson import CSVJSON

CSVKit 类有 2 个构造函数选项;第一个是命令行参数列表,第二个是输出流。如果未提供输出流,它将打印到标准输出。

argparser 模块用于解析命令行参数,所以it's documentation会有帮助。简短的版本是,它就像用空格拆分您在实际命令行上使用的原始参数字符串。例如:

$ csvjson --key Date /path/to/input/file

将转化为:

from csvkit.utilities.csvjson import CSVJSON
args = ["--key", "Date", "/path/to/input/file"]
CSVJSON(args).main()

如果您不想从输入文件读取,但又不能从命令行将输入文件传递到标准输入,您可以将 sys.stdin 对象替换为您的内存版本。唯一的规定是对象的行为必须像输入文件一样。假设您在名为 input_string 的变量中有 CSV 文件的字符串版本,您可以使用 StringIO library创建一个字符串缓冲区:

import StringIO
import sys
new_stdin = StringIO.StringIO(input_string)
sys.stdin = new_stdin
args = ["--key", "Date"]
CSVJSON(args).main()

最后,如果你想打印到一个文件而不是标准输出,传递一个打开的文件对象作为第二个参数:

output_file = open("/path/to/output.txt", "w")
CSVJSON(args, output_file).main()
output_file.close()

请记住,在您自己关闭文件对象之前,它不会刷新缓冲区; CSVJSON 不会为您关闭它。

关于python - csvkit & django a.k.a. 使用 csvkit 作为模块而不是从命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10098950/

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