Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python更新文本文件,添加标题及其相应值_Python_File_Text - Fatal编程技术网

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

Python更新文本文件,添加标题及其相应值,python,file,text,Python,File,Text,我有一个名为headerValue.txt的文本文件,其中包含以下数据:- Name Age sam 22 Bob 21 我正在尝试编写一个python脚本,该脚本将添加一个名为“资格”的新标题。 它将读取文本文件中的行并检查年龄是否超过18岁,然后它将在“合格”标题下打印“真”,还将添加一个名为“成人”的标题,并在下面打印“是”,如果年龄小于18岁则打印“否” 因为在文本文件中,两者的年龄都超过了18岁。输出将类似于:- Name Age Eligibility

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

Name   Age
sam    22
Bob    21
我正在尝试编写一个python脚本,该脚本将添加一个名为“资格”的新标题。 它将读取文本文件中的行并检查年龄是否超过18岁,然后它将在“合格”标题下打印“真”,还将添加一个名为“成人”的标题,并在下面打印“是”,如果年龄小于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新手,所以我有点被困在这里。有关于如何更新文本文件和添加标题及其值的帮助吗?谢谢此模块适合您:

对于内嵌版本,您可以使用:

#!/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
只对第一行(不是您感兴趣的那一行)有效。我用检查年龄指数代替了它。此外,变量名通常不大写。
另外,关于
数据=[fo.readlines()]中的l的l.split()]
-看起来您的文件是以空格分隔的。如果它是以制表符/逗号分隔的,您可以相应地拆分,但我建议使用。

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

似乎您有一个以制表符分隔的文件或以空格分隔的文件。它看起来像一个CSV文件,因此您不妨将其视为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

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

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

我想您需要对原始文件进行更新。@klashxx在他的问题中没有这样说。是的,他这样说了:关于如何更新文本文件并添加带有其值的标题,有什么帮助吗?