我需要在django应用程序中进行一些csv文件处理。
我听说过csvkit,它看起来很酷。
我想尝试一下,但是我不知道如何将csvkit作为一个模块使用。具体来说,我想使用CSVJSON实用程序。我需要向它传递一个csv文件(希望还有一些其他参数),但我不太清楚如何做到这一点。
CSV JSON Docs
我想向实用程序传递一个上传的csv文件,上传的文件可能在内存中(如果足够小)或在临时存储区中。CSVJSON看起来像是一个文件路径或流。如果有人能告诉我我需要对上传的文件做些什么才能使用它,那将是一个很好的奖励。
在django 1.3中,我计划使用form_valid方法来完成这项工作。
希望有一些蟒蛇技能的人可以帮助我展示我需要做什么。谢谢
发布于 2012-06-18 12:59:47
您可以使用以下代码导入CSVKit JSON类:
from csvkit.utilities.csvjson import CSVJSONCSVKit类有两个构造函数选项;第一个是命令行参数列表,第二个是输出流。如果没有提供输出流,它将打印到标准输出。
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()最后,如果要打印到文件而不是stdout,请传递一个打开的文件对象作为第二个参数:
output_file = open("/path/to/output.txt", "w")
CSVJSON(args, output_file).main()
output_file.close()请记住,在您自己关闭文件对象之前,它不会刷新缓冲区;CSVJSON不会为您关闭它。
https://stackoverflow.com/questions/10098950
复制相似问题