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

时间:2015-09-01 09:53:50

标签: python global-variables

我正在使用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]

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

编辑:提供答案

使用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']

1 个答案:

答案 0 :(得分:1)

试试这个 使用以下内容创建名为 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 的简单文本文件,其中包含一系列电视剧,并在<\ n}中添加save方法strong> file1.py ,它会将其参数的内容写入文件 tvseries