2015-03-23 4 views
1

Я пытаюсь удалить некоторые подстроки из строки в файле csv.Python, удаляющий подстроки из строк

import csv 
    import string 

    input_file = open('in.csv', 'r') 
    output_file = open('out.csv', 'w') 
    data = csv.reader(input_file) 
    writer = csv.writer(output_file,quoting=csv.QUOTE_ALL)# dialect='excel') 
    specials = ("i'm", "hello", "bye") 

    for line in data: 
    line = str(line) 
    new_line = str.replace(line,specials,'') 
    writer.writerow(new_line.split(',')) 

    input_file.close() 
    output_file.close() 

Так для этого примера:

hello. I'm obviously over the moon. If I am being honest I didn't think I'd get picked, so to get picked is obviously a big thing. bye. 

Я хочу выход быть:

obviously over the moon. If I am being honest I didn't think I'd get picked, so to get picked is obviously a big thing. 

Однако это работает только при поиске им для одного слова. Так что specials = «Я», например. Нужно ли добавлять мои слова в список или массив?

+0

вставить фрагмент файла – letsc

+0

отредактированных например @letsc –

ответ

0

Похоже, вы не перебирая события, так как это кортеж, а не список, так что это только захватывая один из значений. Попробуйте это:

specials = ["i'm, "hello", "bye"] 

for line in data: 
    new_line = str(line) 
     for word in specials: 
       new_line = str.replace(new_line, word, '') 
    writer.writerow(new_line.split(',')) 
+0

Это читает только первое слово в специальностях. –

+0

Ah - забыли изменить специальные предложения на список, а не на кортеж. См. Измененный код выше. У вас были специальные предложения в виде кортежа, поэтому вы не могли получить доступ к отдельным элементам, итерации по нему. – horsefeathers

0

Кажется, что вы уже разделяете входной сигнал через csv.reader, но затем вы выбрасываете всю эту доброту, поворачивая разделительную линию обратно в строку. Лучше не делать этого, но продолжать работать со списками, которые получаются из читателя csv. Таким образом, это становится чем-то вроде этого:

for row in data: 
    new_row = [] # A place to hold the processed row data. 

    # look at each field in the row. 
    for field in row: 

     # remove all the special words. 
     new_field = field 
     for s in specials: 
      new_field = new_field.replace(s, '') 

     # add the sanitized field to the new "processed" row. 
     new_row.append(new_field) 

    # after all fields are processed, write it with the csv writer. 
    writer.writerow(new_row) 
+0

Спасибо за ваш ответ, но это не делает ничего, но добавить строку между ними для каждой строки файла CSV –

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