我有一些我试图在 Python 中复制的 VB 代码,但我是 Python 新手,它对全局变量的处理让我完全困惑。
我有一个 Python 脚本(pytSettings),它从文本文件中导入文本并将部分文本分配给各种字符串变量。例子...
def main():
strFileS = "/Users/username/Desktop/settings.txt"
fileHandleS = open(strFileS, 'r')
fileContentsS = fileHandleS.readlines()
fileHandleS.close()
strPhotoInclude = fileContentsS[0]
然后,我有第二个脚本 (pytBatch),它遍历单独文本文件的行,并将每行文本的部分分配给不同的字符串变量集。在第二个脚本 (pytBatch) 中,我需要访问第一个脚本 (pytSettings) 中的变量。
使事情复杂化的是,在第二个脚本 (pytBatch) 的 While 循环中,我调用了第三个脚本 (pytGenerate),它需要访问来自第一个和第二个脚本的字符串变量。
def main():
strFileB = "/Users/username/Desktop/batch.txt"
fileHandleB = open(strFileB, 'r')
fileContentsB = fileHandleB.readlines()
fileNumLines = len([l for l in fileContentsB if l.strip(' \n') != ''])
fileHandleB.close
icnt = 0
while icnt < (fileNumLines):
fileHandleB = open(strFileB, 'r')
fileLine = fileHandleB.readlines()
strLineTemp = fileLine[icnt]
strLineTempI = strLineTemp.find("|")
strPhotoLocation = strLineTemp[0:strLineTempI]
if strPhotoLocation == "NullField":
strPhotoInclude = "FALSE"
else:
strPhotoInclude = strPhotoInclude
pytGenerate.main()
icnt = icnt +1
在上面的例子中:
- strPhotoInclude 在 pytSettings 脚本中设置。
- strPhotoLocation 在 pytBatch 脚本中设置
- 如果 strPhotoLocation = "NullField",则 strPhotoInclude 设置为 "FALSE"
- strGenerate 被调用,在该代码中同时使用了 strPhotoInclude 和 strPhotoLocation(未显示,因为在我成功学习如何将变量从 pytSettings 获取到 pytBatch 之前,编写脚本 pytGenerate 是无用的)
- pytBatch 然后恢复并循环通过下一次 icnt 迭代
我已经阅读了几十个关于全局变量的线程,并尝试将全局声明放在任意数量的地方,但我就是无法正确排序。
提前感谢您提供的任何帮助。
编辑添加:
好的。这让我克服了第一个障碍,但是对第三个文件的调用导致了一个相关的问题。
在第二个文件中,有一个循环设置几个全局变量,运行第三个脚本,然后循环通过第二个脚本中的另一个迭代来重置变量,然后重新运行第三个脚本。
import pytSettings
pytSettings_main()
def main():
'''code that loads the text file omitted'''
global strPhoto
icnt = 0
while icnt < (fileNumLines):
strPhoto = strLineTemp
'''reset photo include to false if photo if no photo filename provided'''
if strPhoto == "NullField":
pytSettings.strPhotoInclude = "FALSE"
else:
pytSettings.strPhotoInclude = "TRUE"
'''call the Generate script'''
pytGenerate.main()
'''iterate to next line of the input text file'''
icnt = icnt +1
我的第三个脚本(pytGenerate)无法从第二个脚本(pytBatch)中找到全局变量,但可以从第一个脚本(pytSettings)中找到它们。
import pytSettings
import pytBatch
def main():
print pytSettings.strMarginTop '''this works'''
print pytBatch.strPhoto '''this does not'''
尝试引用第二个脚本的全局变量 (strPhoto) 会导致“'module' 没有属性 'strPhoto'”。