Windows 上的二进制文件是怎么回事?

发布于 2024-10-31 01:01:33 字数 500 浏览 1 评论 0原文

我编写了一个脚本来下载文件,但它仅适用于 Unix/Linux/OSX,当我下载二进制可执行文件、swf、图像等时,

\#Modfied section from PWB.py  
import sys  
if sys.version_info<(2,8):  
    import urllib as request  
else:  
    import urllib.request as request  
x=request.urlopen("http://homestarrunner.com/intro.swf")  
y=x.read()  
x.close()  
z=open("intro.swf","w")  
z.write(y)  
z.close() 

我会得到该文件,以及文件中通常不可读的垃圾,但它将无法读取。

看来二进制文件在 Windows 上总是存在此类问题。 这是为什么呢?

附言。我怎样才能编写我的Python代码以便它可以下载?

I made a script to download a file, but it only works on Unix/Linux/OSX when I'm downloading binary executables, swf's, images, etc

\#Modfied section from PWB.py  
import sys  
if sys.version_info<(2,8):  
    import urllib as request  
else:  
    import urllib.request as request  
x=request.urlopen("http://homestarrunner.com/intro.swf")  
y=x.read()  
x.close()  
z=open("intro.swf","w")  
z.write(y)  
z.close() 

I will get the the file, and the usual unreadable garbage in the file, but it will be unreadable.

It seems binary files always have these sorts of problem on Windows.
Why is this?

PS. How could I write my python code so that it will download?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

肩上的翅膀 2024-11-07 01:01:33

以二进制模式打开二进制文件。

z = open("intro.swf","wb")

Open binary files in binary mode.

z = open("intro.swf","wb")
惜醉颜 2024-11-07 01:01:33

来自 Python 2 文档

在 Windows 上,“b”附加到模式后
以二进制模式打开文件,所以
还有“rb”、“wb”等模式,
和“r+b”。 Windows 上的 Python 使
文本和二进制的区别
文件;中的行尾字符
文本文件会自动更改
读取或写入数据时略有不同。
此次幕后修改
文件数据适合 ASCII 文本
文件,但它会损坏二进制数据
就像 JPEG 或 EXE 文件中的那样。是
使用二进制模式时要非常小心
读取和写入此类文件。在
Unix,附加一个“b”并没有什么坏处
到模式,这样你就可以使用它
所有二进制文件均与平台无关
文件。

From the Python 2 documentation:

On Windows, 'b' appended to the mode
opens the file in binary mode, so
there are also modes like 'rb', 'wb',
and 'r+b'. Python on Windows makes a
distinction between text and binary
files; the end-of-line characters in
text files are automatically altered
slightly when data is read or written.
This behind-the-scenes modification to
file data is fine for ASCII text
files, but it’ll corrupt binary data
like that in JPEG or EXE files. Be
very careful to use binary mode when
reading and writing such files. On
Unix, it doesn’t hurt to append a 'b'
to the mode, so you can use it
platform-independently for all binary
files.

π浅易 2024-11-07 01:01:33

在 Windows 上使用 z=open("intro.swf","wb") 以二进制模式打开文件。

http://docs.python.org/tutorial/inputoutput.html

Use z=open("intro.swf","wb") on Windows to open the file in binary mode.

http://docs.python.org/tutorial/inputoutput.html

莫言歌 2024-11-07 01:01:33

您必须在 open() 的参数中使用“wb”才能以二进制模式获取它 - 默认为文本模式,它将 \n 转换为 CR/LF。

You have to use "wb" in the argument for open() to get it in binary mode - the default is text mode which converts \n to CR/LF.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文