Python保存到文件


77

我想使用一个名为python程序将字符串保存到文件 Failed.py

这是我到目前为止的内容:

myFile = open('today','r')

ips = {}

for line in myFile:
    parts = line.split(' ')
    if parts[1] == 'Failure':
        if parts[0] in ips:
            ips[pars[0]] += 1
        else:
            ips[parts[0]] = 0

for ip in [k for k, v in ips.iteritems() if v >=5]:
    #write to file called Failed.py

2
出于纯粹的好奇心:是否有办法将一个答案变成公认的答案?(Stefan似乎多年都没有活动)
Wolf

实际问题是什么?
洛恩侯爵,

Answers:


168
file = open('Failed.py', 'w')
file.write('whatever')
file.close()

这是一个更加Python化的版本,即使在包装的代码块中有异常,它也会自动关闭文件:

with open('Failed.py', 'w') as file:
    file.write('whatever')

2
file是不是在蟒蛇受保护的话,就没有必要使用file_,除非您的编码风格指南要求_在任何情况下(文件,函数,类,方法)这发生在变量后缀
zstewart

6
这与编码风格无关。file具有许多其他功能。它不建议与其他变量影子这些内置的功能。
warvariuc

1
file已在python 3中弃用并删除,因此可以在那里使用。我没有在问题上看到2.7标记,通常使用python 3 ...
zstewart

2
@Anatoly您没有关闭文件
warvariuc '17

3
@warvariuc谢谢你,你是对的,那么这似乎不是最佳实践
Anatoly Vasilyev

20

您需要使用再次打开文件open(),但这一次是'w'要指示您要写入文件。我还建议您使用with来确保在完成写入文件后将其关闭。

with open('Failed.txt', 'w') as f:
    for ip in [k for k, v in ips.iteritems() if v >=5]:
        f.write(ip)

自然地,您可能希望在输出中包括换行符或其他格式,但是基础如上所述。

关闭文件的相同问题也适用于阅读代码。看起来应该像这样:

ips = {}
with open('today','r') as myFile:
    for line in myFile:
        parts = line.split(' ')
        if parts[1] == 'Failure':
            if parts[0] in ips:
                ips[pars[0]] += 1
            else:
                ips[parts[0]] = 0

2

您可以使用此功能:

def saveListToFile(listname, pathtosave):
    file1 = open(pathtosave,"w") 
    for i in listname:
        file1.writelines("{}\n".format(i))    
    file1.close() 

# to save:
saveListToFile(list, path)

1
myFile = open('today','r')

ips = {}

for line in myFile:
    parts = line.split()
    if parts[1] == 'Failure':
        ips.setdefault(parts[0], 0)
        ips[parts[0]] += 1

of = open('failed.py', 'w')
for ip in [k for k, v in ips.iteritems() if v >=5]:
    of.write(k+'\n')

检出setdefault,它使代码更易读。然后,使用文件对象的write方法转储数据。


1
没错,他说的是。在末尾附加一个of.close。否则,您假设GC将关闭文件。显式胜于隐式。谢谢。
杰姆2012年

1
@jaime真的,您需要做的不仅仅是打电话close。您需要在finally块中执行此操作以防御异常。惯用的方法是使用with上下文处理程序。
David Heffernan'3

1
是的,谢谢。这让我无所适从,但我担心要解释何时最终被致电。然后,在阅读您的评论后,我意识到他标记了问题python-2.7。谢谢。
杰米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.