Python - 从文件写入两个文件

时间:2014-09-18 15:01:38

标签: python file function if-statement

我希望有一个接收输入文件并输出2个文件的函数。我做的第一个输出文件,但第二个输出文件将取决于我无法工作的第一个输出结果...

输入文件:

FirstName,LastName,DOB,POSTCODE
FirstName,LastName,DOB,POSTCODE
FirstName,LastName,DOB,POSTCODE

输出文件1:

Firstname,DOB
Firstname,DOB
Firstname,DOB

输出文件2 :(仅在DOB等于2000时)

Firstname,POSTCODE
Firstname,POSTCODE
Firstname,POSTCODE

我有完成这项任务的功能,但现在我希望进一步发挥我的学习效益,并且已经陷入困境......

我想要发生什么......

如果输出文件1中的DOB是'2000',则写入输出文件3.

当前功能:

def func(iFile):
    with open(iFile) as iF:
        with open("DOB.txt", "a") as oF1:
            for line in iF:
                chars = line.split(',')
                oF1.write(chars[0] + ',' + chars[2])
                oF1.write('\n')
        with open("DOB.txt", "a") as iF1:
            with open("POSTCODE.txt", "a") as oF2:
                chars = line.split(',')
                for line in iF:
                    if char[2] == "2000":
                        oF2.write(chars[0] + ',' + chars[3])
                        oF2.write('\n')

所以基于此......

我想将输入文件放入函数中,首先将其拆分为一个带有firstname&的文件。 DOB,然后对于该文件中的每一行,如果该文件的DOB是'2000',我想在新的firstname.POSTCODE文件中输出该输出。

我当前的脚本会创建两个文件。 将填充DOB.txt文件,但会生成重复的行。 POSTCODE.txt文件为空。

任何帮助将不胜感激。 :)

4 个答案:

答案 0 :(得分:2)

你可以在迭代iF中的行之前打开两个输出文件(这就是你的版本没有产生任何POSTCODE.txt的原因 - 因为iF已经迭代过了而没有(左)。

这应该有效:

def func(iFile):
    with open(iFile) as iF:
        with open("DOB.txt", "a") as oF1:
            with open("POSTCODE.txt", "a") as oF2:
                for line in iF:
                    chars = line.split(',')
                    oF1.write(chars[0] + ',' + chars[2])
                    oF1.write('\n')
                    if chars[2] == "2000":
                        oF2.write(chars[0] + ',' + chars[3])
                        oF2.write('\n')

答案 1 :(得分:1)

所以你有这个输入:

FirstName,LastName,DOB,POSTCODE
FirstName,LastName,2000,POSTCODE
FirstName,LastName,DOB,POSTCODE
FirstName,LastName,DOB,POSTCODE
FirstName,LastName,2000,POSTCODE
FirstName,LastName,DOB,POSTCODE

您想要此输出1:

FirstName,DOB
FirstName,DOB
FirstName,DOB
FirstName,DOB

这个投入2:

FirstName,POSTCODE
FirstName,POSTCODE

然后你可以试试这个:

with open('input.txt') as input, open('output1.txt', 'w') as oF1, open('output2.txt', 'w') as oF2 :

    for line in input:
        chars = line.split(',')

        if chars[2] == "2000":
            oF2.write(chars[0] + "," + chars[3])
        else:
            oF1.write(chars[0] + "," + chars[2] + "\n")

答案 2 :(得分:0)

我知道这种技术有点不赞成,但你可以这样做:

file1 = open("firstfile.txt","w")
file2 = open("secondfile.txt","w")

然后使用file1.write(...)file2.write(...)正确分割输出。在这种情况下,with语法可能有点棘手。

此外,"a"用于追加。当您的意思是"a"时,请注意不要使用"w",反之亦然。

答案 3 :(得分:0)

你是第二次打开DOB.txt open("DOB.txt", "a"),这是为了追加而不是为了阅读。

空POSTCODE.txt毫不奇怪,因为当你第二次打开它时你无法阅读它。