如何从外部文件中读取变量?

时间:2017-11-16 21:01:21

标签: python

我试图学习Python,在这一点上,我很困惑。这就是我试图做的事情:

我有一个需要从外部文件调用变量的Python脚本。外部数据文件不能与Python脚本位于同一文件夹中。数据文件的位置当前为/Users/discoveryone/Documents(这将在Macintosh上运行)。这是数据文件的内容:

domains='apple.com', 'google.com', 'yahoo.com', 'aol.com', 'disney.com', 'mydomain.com', 'hotmail.com'
email='noone1@nowhere.com'
smtpserver='smtp.mydomain.com'
smtpport='465'
smtpto='noone1@nowhere.com'
smtpfrom='noone2@nowhere.com'

我需要调用domains字段中的所有值,然后分别通过while循环处理它们,并在需要时使用其他数据。

有人可以帮我将外部数据文件调用到我的Python脚本中吗?

2 个答案:

答案 0 :(得分:1)

假设您的文件名为file.txt,您可以将所有这些变量添加到global scope,其中包含:

with open("/Users/discoveryone/Documents/file.txt") as f:
    for l in f:
        var, val = l.split("=")
        globals()[var] = val.strip().replace("'", "")

然后您可以访问email例如,它将具有值:

'noone1@nowhere.com'

唯一的问题是domains只是string的{​​{1}}:

domains

要将其转换为'apple.com, google.com, yahoo.com, aol.com, disney.com, mydomain.com, hotmail.com' 列表,只需添加domains

即可
line

domains = [d.strip() for d in domains.split(",")] 修改为:

domains

答案 1 :(得分:-2)

如果可以,请使用configparser(http://docs.python.org/3/library/configparser.html)。但这会迫使您更改配置文件的结构。

如果您只需要域值:

    <header>
        <div id="bgimage"></div>
        <nav>
            <a href="home.html" title="Click to go to the homepage.">Home</a>
            <span class="divider">-</span>
            <a href="cakes.html" title="Click to see types of cakes.">Types of Cake</a>
        </nav>
        <h1>Cakes</h1>
    </header>

body header {
    width:100%;
    text-align:center;
    box-shadow:0 4px 4px 4px rgba(0,0,0,0.2);
    z-index:4;
    position:relative;
    background-color:linear-gradient(CornFlowerBlue,RoyalBlue);
}
body header div#bgimage {
    background-attachment:fixed;
    background-position:center;
    background-size:cover;
    background-image:url(hydrangea-cakes-2.jpg);
    filter:blur(1px);
    position:absolute;
    width:100%;
    height:100%;
}

您还可以创建字典:

with open('/Users/discoveryone/Documents/file') as my_file:
    d_line = my_file[0]
    d_values = [v.replace("'", "") for v in d_line.split('=')[1].split(',')]