Python更新文本文件,添加标题及其对应的值

时间:2014-07-15 06:21:12

标签: python file text

我有一个名为headerValue.txt的文本文件,其中包含以下数据: -

Name   Age
sam    22
Bob    21

我正在尝试编写一个python脚本,它会添加一个名为“Eligibility”的新标题。 它将读取文本文件中的行并检查年龄是否超过18,然后它将在“Eligibility”标题下方打印“True”,并添加一个名为“Adult”的标题并在下方打印“yes”并且'不,如果年龄小于18岁。

因为在文本文件中,两者的年龄都大于18.输出将类似于: -

Name    Age    Eligibility    Adult
sam     22       True         yes
Bob     21       True         yes

代码段: -

fo =open("headerValue.txt", "r")
data = fo.readlines()
for line in data:
    if "Age" in line:
        if int(Age) > 18:
            Eligibility = "True"
            Adult = "yes"

我有点被困在这里因为我是python的新手。有任何帮助如何更新文本文件并添加标题及其值?谢谢

3 个答案:

答案 0 :(得分:1)

您正在尝试检查一行中是否存在字符串"Age"。它只存在于第一行。然后你尝试将变量Age转换为一个整数,看看它是否大于18.我看不到你已经在任何地方定义了Age所以我无法判断这个代码是否运行。

您似乎有一个制表符分隔或空格分隔的文件。它看起来像一个CSV文件,所以你不妨这样对待它。它更容易,因为python提供了内置的csv模块。在该模块中,有csv.DictReadercsv.DictWriter个对象,允许您将csv文件中的每一行修改为字典。在下面的文件中,csv.DictWriter获取默认标头名称,restval - 参数定义字段的默认参数。这可以简化代码,如下所示:

>>> with open("test.csv", "r") as inf, open("out.csv", "w") as outf:
...    in_reader = csv.DictReader(inf, delimiter=" ")
...    out_writer = csv.DictWriter(outf, delimiter=" ", fieldnames=['Name', 'Age', 'Eligibility', 'Adult'], restval=False)
...    out_writer.writeheader()
...    for line in in_reader:
...        if int(line['Age']) > 18:
...             line['Eligibility'] = True
...             line['Adult'] = True
...         out_writer.writerow(line)

输入文件为test.csv

msvalkon@lunkwill~$: cat test.csv
Name Age
sam 22
Bob 21
foo 5

out.csv中的输出:

msvalkon@lunkwill~$: cat out.csv
Name Age Eligibility Adult
sam 22 True True
Bob 21 True True
foo 5 False False

答案 1 :(得分:0)

此模块适合您:https://docs.python.org/2/library/fileinput.html?highlight=fileinput#fileinput

对于infile版本,您可以使用:

#!/usr/bin/python
import fileinput

cont = 0
for line in fileinput.input("./path/to/file", inplace=True):
    if not cont:
        name = "Name"
        age = "Age"
        Eligibility= "Eligibility"
        Adult = "Adult"
    else:
        name ,age = line.split()
        if int(age) > 18:
                Eligibility = "True"
                Adult = "yes"
    print "{0}\t{1}\t{2}\t{3}".format(name, age, Eligibility, Adult)
    cont += 1

这将更新您的原始文件。

答案 2 :(得分:0)

fo =open("headerValue.txt", "r")
data = [l.split() for l in fo.readlines()]
headers = data[0]
headers.extend(('Eligibility', 'Adult'))
ageind = headers.index('Age')
for line in data[1:]:
    if int(line[ageind]) > 18:
        line.extend(('True', 'yes'))
    else:
        line.extend(('False', 'no'))

代码中的if只适用于第一行(不是您感兴趣的那一行)。我用检查年龄指数代替了它。此外,通常变量名称不是大写的。 此外,关于data = [l.split() for l in fo.readlines()] - 看起来您的文件是空格分隔的。如果它以制表符/逗号分隔,您可以相应地进行拆分,但我建议使用csv