有关Python中文件格式的新手问题

时间:2011-01-08 13:29:05

标签: python file curl pastebin

我正在使用pycURL库在Python 2.7中编写一个简单的程序,以便将文件内容提交给pastebin。 这是该计划的代码:

#!/usr/bin/env python2

import pycurl, os

def send(file):
    print "Sending file to pastebin...."
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, "http://pastebin.com/api_public.php")
    curl.setopt(pycurl.POST, True)
    curl.setopt(pycurl.POSTFIELDS, "paste_code=%s" % file)
    curl.setopt(pycurl.NOPROGRESS, True)
    curl.perform()

def main():
    content = raw_input("Provide the FULL path to the file: ")
    open = file(content, 'r')
    send(open.readlines())
    return 0

main()

输出pastebin看起来像标准的Python列表:['string\n', 'line of text\n', ...]等。

有没有什么方法可以让它格式化,所以看起来更好,它实际上是人类可读的?另外,如果有人能告诉我如何在POSTFIELDS中使用多个数据输入,我会很高兴。 Pastebin API使用paste_code作为主要数据输入,但它可以使用paste_name等可选内容来设置上传名称或paste_private将其设置为私有。

4 个答案:

答案 0 :(得分:3)

首先,使用.read()作为virhilo表示。

另一步是使用urllib.urlencode()来获取字符串:

curl.setopt(pycurl.POSTFIELDS, urllib.urlencode({"paste_code": file}))

这也允许您发布更多字段:

curl.setopt(pycurl.POSTFIELDS, urllib.urlencode({"paste_code": file, "paste_name": name}))

答案 1 :(得分:1)

import pycurl, os

def send(file_contents, name):
    print "Sending file to pastebin...."
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, "http://pastebin.com/api_public.php")
    curl.setopt(pycurl.POST, True)
    curl.setopt(pycurl.POSTFIELDS, "paste_code=%s&paste_name=%s" \
                                   % (file_contents, name))
    curl.setopt(pycurl.NOPROGRESS, True)
    curl.perform()


if __name__ == "__main__":
    content = raw_input("Provide the FULL path to the file: ")
    with open(content, 'r') as f:
        send(f.read(), "yournamehere")
    print

在阅读文件时,请使用with语句(如果出现问题,这可确保您的文件正常关闭)。

没有必要拥有main函数然后调用它。使用if __name__ == "__main__"构造使脚本在调用时自动运行(除非将其作为模块导入)。

要发布多个值,您可以手动构建网址:只需使用&符号(&)分隔不同的键值对。像这样:key1=value1&key2=value2。或者您可以使用urllib.urlencode构建一个(与其他人建议的那样)。

编辑:对要发布的字符串使用urllib.urlencode可确保在源字符串包含一些有趣/保留/异常字符时正确编码内容。

答案 2 :(得分:0)

使用.read()而不是.readlines()

答案 3 :(得分:0)

POSTFIELDS的发送方式与发送查询字符串参数的方式相同。因此,首先,您需要encode发送到paste_code的字符串,然后使用&添加更多POST参数。

示例:

paste_code=hello%20world&paste_name=test
祝你好运!