Python:如何创建一个新文件并将变量的内容写入它?

时间:2012-11-28 20:23:32

标签: python

我正在编写一个程序,通过查看其标题来输出目录中的文件类型。

有些文件是压缩的,所以我需要能够将它们解压缩为起点

到目前为止,我已经能够搜索目录并使用标题更改扩展名,并打开压缩文件并将其内容存储在变量中,现在我无法将变量保存为新文件。

def unzip():
    os.chdir("C:/Users/David/Myfiles")
    files = os.listdir(".")
    for x in (files):
        f = open((x), "rb")
        byte1 = f.read(1)
        byte2 = f.read(1)
        if byte1 == b'\x1f' and byte2 == b'\x8b':
            os.rename((x), (x) + ".gz")
            file = gzip.open((x), "rb")
            content = file.read()   
            print (content)

我猜我必须使用f.write("newfile", content)行的命令,但不确定。

提前致谢

3 个答案:

答案 0 :(得分:8)

通常,如果变量foo中有字符串,则可以将其写入文件:

with open('output.file','w') as f:
    f.write(foo)

在您的情况下,您不会使用f,因为您已经使用f作为输入文件句柄。

我想你想要的东西是:

def unzip():
    os.chdir("C:/Users/Luke/Desktop/Cache")
    files = os.listdir(".")
    for x in (files):
        ifh = open((x), "rb")
        byte1 = ifh.read(1)
        byte2 = ifh.read(1)
        if byte1 == b'\x1f' and byte2 == b'\x8b':
            os.rename((x), (x) + ".gz")
            file = gzip.open((x), "rb")
            contents = file.read()   
            with open('output.file','w') as ofh:
                ofh.write(contents)

答案 1 :(得分:1)

你应该做点什么:

with open('filename.whatever', 'wb') as output:
    output.write(your_data)

查看http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

上的文档

答案 2 :(得分:1)

您不必查看前两个字节来识别gz文件。相反,我认为更多的“Pythonic”方法是首先尝试,稍后道歉(通常称为"Easier to ask Forgiveness than Permission"):

import os
import bz2
import gzip

def write(filename, content):
    with open(filename, 'w') as g:
        g.write(content)

def uncompress(dirpath):
    for filename in os.listdir(dirpath):
        filename = os.path.join(dirpath, filename)
        for opener in (gzip.open, bz2.BZ2File):
            try:
                with opener(filename) as f:
                    newfile, ext = os.path.splitext(filename)
                    content = f.read()
                os.unlink(filename)
                write(newfile, content)
            except IOError:
                continue
            else: # break if try worked without IOError        
                break

dirpath = "C:/Users/Luke/Desktop/Cache"
uncompress(dirpath)

此外,最好避免在可能的情况下使用os.chdir,因为即使在离开uncompress函数后它也会改变当前目录。如果您的脚本处理其他目录,那么您必须在程序的每个阶段仔细控制当前目录。如果您使用os.path.join,则无需担心当前目录是什么。