我希望有一个接收输入文件并输出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文件为空。
任何帮助将不胜感激。 :)
答案 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毫不奇怪,因为当你第二次打开它时你无法阅读它。