首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csvkit & django。使用csvkit作为模块,而不是从命令行

csvkit & django。使用csvkit作为模块,而不是从命令行
EN

Stack Overflow用户
提问于 2012-04-11 10:06:35
回答 1查看 907关注 0票数 2

我需要在django应用程序中进行一些csv文件处理。

我听说过csvkit,它看起来很酷。

github page

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

CSV JSON Docs

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 12:59:47

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

代码语言:javascript
复制
from csvkit.utilities.csvjson import CSVJSON

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

argparser模块用于解析命令行参数,因此it's documentation将非常有用。简而言之,这就像在实际命令行中使用的原始参数字符串被空格分割一样。例如:

代码语言:javascript
复制
$ csvjson --key Date /path/to/input/file

将转化为:

代码语言:javascript
复制
from csvkit.utilities.csvjson import CSVJSON
args = ["--key", "Date", "/path/to/input/file"]
CSVJSON(args).main()

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

代码语言:javascript
复制
import StringIO
import sys
new_stdin = StringIO.StringIO(input_string)
sys.stdin = new_stdin
args = ["--key", "Date"]
CSVJSON(args).main()

最后,如果要打印到文件而不是stdout,请传递一个打开的文件对象作为第二个参数:

代码语言:javascript
复制
output_file = open("/path/to/output.txt", "w")
CSVJSON(args, output_file).main()
output_file.close()

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10098950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档