编辑在不同文件中定义的python全局变量



我正在使用Python 2.7。我想存储一个变量,这样我就可以运行一个脚本,而不用在脚本中定义变量。我认为全局变量是这样做的,虽然我愿意纠正。

我在file1.py中定义了一个全局变量:

def init():
    global tvseries
    tvseries = ['Murder I Wrote','Top Gear']

在另一个文件file2.py中,我可以调用这个变量:

import file1
file1.init()
print file1.tvseries[0]

如果我编辑file1。在file2.py中不存储tvseries (file1.tvseries[0] = 'The Bill')。如何编辑file1的值?在file2.py中的Tvseries以便保留此编辑?

EDIT:提供答案

使用pickle:

import  pickle
try:
    tvseries = pickle.load(open("save.p","rb"))
except:
    tvseries = ['Murder I Wrote','Top Gear']
print tvseries
tvseries[0] = 'The Bill'
print tvseries
pickle.dump(tvseries,open("save.p", "wb"))

使用json:

import json
try:
    tvseries = json.load(open("save.json"))
    tvseries = [s.encode('utf-8') for s in tvseries]
except:
    tvseries = ['Murder I Wrote','Top Gear']
print tvseries
tvseries[0] = str('The Bill')
print tvseries
json.dump(tvseries,open("save.json", "w"))

这两个文件第一次运行时都返回['Murder I Wrote','Top Gear']['The Bill','Top Gear'],第二次运行时返回['The Bill','Top Gear']['The Bill','Top Gear']

试试这个创建一个名为tvseries的文件,内容如下:

Murder I Wrote
Top Gear

file1.py :

with open("tvseries", "r") as f:
    tvseries = map(str.strip, f.readlines())
def save(tvseries):
    with open("tvseries", "w") as f:
        f.write("n".join(tvseries))

file2.py :

import file1
print file1.tvseries[0]
file1.tvseries.append("Dr Who")
file1.save(file1.tvseries)

我已经把你的init方法的内容移到了模块级别,因为我没有看到它存在的任何需要。当您执行import file1时,模块级别的任何代码都将自动运行—无需手动执行file1.init()。我还更改了代码,通过读取一个简单的文本文件tvseries来填充tvseries的内容,该文件名为tvseries,其中包含一个电视剧列表,并在file1.py中添加了一个save方法,该方法将其参数的内容写入文件tvseries

相关内容

  • 没有找到相关文章

最新更新