Python更新文本文件添加头及其相应的值

2024-09-29 23:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为headerValue.txt其中包含以下内容数据:-在

Name   Age
sam    22
Bob    21

我正在尝试编写一个python脚本,它将添加一个名为“合格性”的新头。 它将从文本文件中读取行并检查年龄是否超过18岁,然后在“合格”标题下打印“真”,并在“成人”标题下再添加一个标题“是”,如果年龄小于18岁则打印“否”。在

因为在文本文件中两者的年龄都超过18岁。输出将是比如:在

^{pr2}$

代码片段:-在

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新手,所以我有点困在这里了。有什么帮助如何更新文本文件和添加标题的值?谢谢


Tags: 数据nameintxt标题agedataif
3条回答

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

似乎您有一个制表符分隔或空格分隔的文件。它看起来像一个CSV文件,所以你可以这样对待它。这更简单,因为python提供了一个内置的^{}模块。在这个模块中有^{}^{}对象,它们允许您将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

^{pr2}$

out.csv中的输出:

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

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

对于填充版本,可以使用:

#!/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

这将更新您的原始文件。在

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。在

相关问题 更多 >

    热门问题