2014-09-18 3 views
0

Я хочу иметь функцию, которая принимает входной файл и выводит 2 файла. Первый выходной файл я сделал, но второй выходной файл будет зависеть от результатов первого, который я не могу заставить работать ...Python - Запись из файла в два файла

входного файла:

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

Выходной файл 1:

Firstname,DOB 
Firstname,DOB 
Firstname,DOB 

Outputfile 2: (ТОЛЬКО ЕСЛИ DOB равна 2000)

Firstname,POSTCODE 
Firstname,POSTCODE 
Firstname,POSTCODE 

у меня есть функции, сделать эту задачу ре rfectly хорошо, но теперь я хочу, чтобы в дальнейшем функцию для моих преимуществ обучения и застревают ...

То, что я хочу, чтобы это произошло ...

ЕСЛИ DOB в выходном файле 1, «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') 

Так на этой основе ....

Я хочу, чтобы входной файл в функцию первого расщепляется на один файл с первым именем & DOB, то для каждой строки в этом файле, если DOB этого файла имеет значение «2000», я хочу, чтобы этот вывод появился в новом файле firstname.POSTCODE.

Мой текущий скрипт создает оба файла. Файл DOB.txt заполняется, но создает повторяющиеся строки. Файл POSTCODE.txt пуст.

Любая помощь будет оценена по достоинству. :)

ответ

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') 
+0

Спасибо - это работает, но есть один issue - он создает несколько «Firstname: DOB» в выходном файле 1? – Eric1989

+0

Nevermind - была моя неудача. xD – Eric1989

0

Я знаю, что этот метод несколько устарел, но вы можете просто сделать:

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

, а затем использовать file1.write(...) и file2.write(...) правильно разделить выход. Синтаксис with может быть немного сложным в этом контексте.

Также, "a" предназначен для добавления. Будьте осторожны, если вы не используете "a", когда имеете в виду "w" и наоборот.

+0

Спасибо - я постараюсь это. Можете ли вы привести пример кода, относящийся к моей текущей функции, где размещать основы, такие как инструкции IF, и открытие каких файлов где. Спасибо – Eric1989

0

Вы открываете DOB.txt второй раз как open("DOB.txt", "a"), который предназначен для добавления, а не для чтения.

Нет ничего удивительного в пустом POSTCODE.txt, так как вы не сможете его прочитать, когда вы откроете его во второй раз.

+0

Привет - Я знаю, что это так, но я попытался включить в первое открытие файла, но мне не повезло, и я просто прибегаю к чему-либо сейчас, чтобы попытаться заставить его работать. – Eric1989

+0

Используйте 'open (" DOB .txt "," r ")' '' second' и оставить первый как есть. –

+0

Он по-прежнему создает те же проблемы - это просто позиционирование оператора if, я думаю, почему он не пишет в файл почтового индекса - – Eric1989

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 

И это putput 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") 
+0

Выходной файл 1 пуст; однако выходной файл 2 сработал – Eric1989

+0

Thats странно, для меня это правильно работает – nouseforname

+0

@nouseforname, потому что у вас, вероятно, были разные данные, поэтому вы не видели, что вы должны ВСЕГДА писать в 'oF1', но ваш код выбирает только один вывод file - либо 'oF1', либо' oF2', но Eric1989 хотел, чтобы все они записывались в 'oF1', а иногда и в' oF2'. –

Смежные вопросы