Удалить '' \ n "из списка строк при чтении файла в Python - PullRequest
1 голос
/ 01 марта 2020
def files_to_dict(folder_name):
    list_of_files = os.listdir("./"+folder_name) #read file names of current dir in list
    newDict=dict()
    for year in (list_of_files):
        if(year!=".ipynb_checkpoints"):
            ofile = open("./"+folder_name+"/"+year,"r")
            data = ofile.read().split(',')

    return data

Я пытаюсь удалить все разделители при чтении файла в список, включая '\ n'. Я пытался использовать вышеупомянутый метод, но он дает вывод, как

'Эмма', 'F', '20799 \ nOlivia', 'F', '19674 \ nSophia', 'F', '18490 \ nIsabella', 'F', '16950 \ nAva',

Список продолжается по тому же шаблону. Я хочу удалить '\ n' из середины строки в списке. Я хочу найти эффективное решение, которое не предполагает повторного запуска al oop по всему списку и удаления символа \ n из каждого индекса.

Ожидаемый вывод:

«Эмма», «F», «20799», «Оливия», «F», «19674», «София», «F», «18490», «Изабелла», «F», «16950», « Ava ',

Ответы [ 5 ]

1 голос
/ 01 марта 2020

Я думаю, что вы пытаетесь заменить символы "\ n" разделителем, а не удалять их:

def files_to_dict(folder_name):
    list_of_files = os.listdir("./"+folder_name) #read file names of current dir in list
    newDict=dict()
    for year in (list_of_files):
        if(year!=".ipynb_checkpoints"):
            with open("./"+folder_name+"/"+year,"r") as ofile:
                data = ofile.read().replace('\n', ',').split(',')
                return data
0 голосов
/ 03 марта 2020

Используйте data.strip(), чтобы удалить '\ n' из строки

0 голосов
/ 01 марта 2020

Это очень просто, используйте split () вместо split (',') в вашем коде. Я изменил ваш код, и он показан ниже: -

def files_to_dict(folder_name):
list_of_files = os.listdir("./"+folder_name) #read file names of current dir in list
newDict=dict()
for year in (list_of_files):
    if(year!=".ipynb_checkpoints"):
        ofile = open("./"+folder_name+"/"+year,"r")
        data = ofile.read().split()

return data

Пожалуйста, обратитесь к следующему коду и вывод, если есть еще какая-то путаница. Чтобы понять легко, я выполнил приведенный ниже код на основе вашего ввода

код:

fh=open("trystack.txt",'r')
for line in fh:
    lines=fh.read().split()
    print(lines)  
fh.close() 

вывод:

['Оливия', 'F', '19674', 'София', 'F', '18490', 'Изабелла', 'F', '16950']

Мой текстовый файл trystack.txt содержит:

Эмма Ф 20799

Оливия Ф 19674

София Ф 18490

Изабелла Ф 16950

Это поможет вам добиться того, что вам нужно, т.е. удалить '\ n'

ThankYou

0 голосов
/ 01 марта 2020

Я не знаю, как выглядят ваши файлы, но я вижу, что вы никогда не используете newDict, поэтому вы просто возвращаете последний обработанный файл

Попробуйте проверить, ближе ли следующее к тому, что вы хотите

with open("./"+folder_name+"/"+year) as ofile:
    data_lines = [s.rstrip() for s in ofile.readlines()] 
    # would be better if you used csv module 
    data = [s.split(',') for s in data_lines]
    print(data)
0 голосов
/ 01 марта 2020
data =  'Emma', 'F', '20799\nOlivia', 'F', '19674\nSophia', 'F', '18490\nIsabella', 'F', '16950\nAva','Emma', 'F', '20799\nOlivia', 'F', '19674\nSophia', 'F', '18490\nIsabella', 'F', '16950\nAva'
sum((s.split('\n') for s in data), [])

['Эмма', 'F', '20799', 'Оливия', 'F', '19674', 'София', 'F', '18490', 'Изабелла', 'F' , «16950», «Ава», «Эмма», «F», «20799», «Оливия», «F», «19674», «София», «F», «18490», «Изабелла», « F ',' 16950 ',' Ava ']

или, если это строка, подобная приведенной ниже:

data = "Emma", "F", "20799 \ nOlivia", 'F', '19674 \ nSophia', 'F', '18490 \ nIsabella', 'F', '16950 \ nAva', 'Emma', 'F', '20799 \ nOlivia', 'F', '19674 \ nSophia ',' F ',' 18490 \ nIsabella ',' F ',' 16950 \ nAva ''

import re
re.findall(r"[\w]+", data)

['Emma', 'F', '20799', 'Olivia', «F», «19674», «София», «F», «18490», «Изабелла», «F», «16950», «Ава», «Эмма», «F», «20799», «Оливия» ',' F ',' 19674 ',' София ',' F ',' 18490 ',' Изабелла ',' F ',' 16950 ',' Ава ']

...