Python:复制上载的Excel文件将被编码为二进制格式并变得无法使用

时间:2015-01-25 06:28:40

标签: python excel python-2.7 file-upload cgi

我正在尝试将已上传的 .xls 文件复制到 Python中的本地位置。但复制的excel文件具有二进制字符,如

`èÃÖz­û¬öv¢Ã¿Þ#Ö}®×BˆGŸì“þ¨Kù¯éä:ÅBHoÑ?±M¾«fò¶Ü2›§]¹Õ®JiËXgE*æÆQÁ¯¸&ÿŒ¨#ºÎsè=³`îž5¹‰nŠ¬Ëΰ±$õºé/š]´cZ̤Bž’8*ûM¸¾,ú£.ú]ÑwÑëü‡þR2*7ª`

我可以在代码中进行哪些更改以使其正常工作。 我使用以下代码,

index.html文件:

<body>
    <form name='getXlFileForm' action='reader.py' method='post'  enctype='multipart/form-data'>
        <input type='file' name='xlFileFromForm' />
        <input type='submit' value='Upload' />
    </form>
</body>

reader.py文件:

cgitb.enable()
requestForm = cgi.FieldStorage()
uploadedFiles = requestForm['xlFileFromForm']

if uploadedFiles.filename:
    tf = tempfile.NamedTemporaryFile(prefix='c:/myOut/', suffix='.xls', delete=False)
    uploadedName = os.path.basename(uploadedFiles.filename)
    open(tf.name,"w").write(uploadedFiles.file.read())
#also tried "wb" mode

1 个答案:

答案 0 :(得分:0)

  

我很困惑为什么文件在上传期间变成二进制格式

自您创建文件以来,您的文件一直是二进制文件。您通常只使用一个软件程序来查看它,该程序将二进制数据解释为行和列,包括文本数据,公式,图形等。

如果您查看程序中的.xls文件,该程序不知道如何将二进制数据转换为电子表格(如文本编辑器),则二进制数据将转换为字符,这通常看起来像乱码。

以下是我在文本编辑器中打开的.xls文件的一部分:

#0_);\("$"#,##0\)..!......"$"#,##0_);[Red]\("$"#,##0\).."......"$"#,##0.00_);\("$"#,##0.00\)..'...".."$"#,##0.00_);[Red]\("$"#,##0.00\)..7.*.2.._("$"*
#,##0_);_("$"* \(#,##0\);_("$"* "-"_);_(@_)....).).._(* #,##0_);_(* \(#,##0\);_(* "-"_);_(@_)..?.,.:.._("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)..6.+.1.._(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_).

编辑:

您肯定希望以二进制模式编写:wb。看看你是否可以更简单地工作:

#!/usr/bin/env python
import cgi
import cgitb
cgitb.enable()

requestForm = cgi.FieldStorage()
uploadedFile = requestForm['xlFileFromForm']

if uploadedFile.file:
    f = open('uploaded.xls', 'wb')  #writes file to the cgi-bin directory
    f.write(uploadedFile.file.read())
    f.close()
    msg = 'wrote file'
else:
    msg = "failed"


html = """Content-type:text/html\r\n\r\n
<html>
<head>
<title>Test CGI</title>
</head>
<body>
<div>Hello: {}</div>
</body>
</html>
""".format(msg)

print html

当我这样做时,新文件的文件大小与我上传的.xls文件完全相同。

HTML:

 <form name='getXlFileForm' action='cgi-bin/mycgi2.py' method='post'  
    enctype='multipart/form-data'>
    <input type='file' name='xlFileFromForm' />
    <input type='submit' value='Upload' />
  </form>