在 Python 中读取文件时从字符串列表中删除 ''\n"

Remove ''\n" from list of strings while file reading in Python

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”。我试过使用上述方法,但它给出的输出类似于

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

列表将以相同的模式继续下去。 我想从列表中的字符串中间删除 '\n'。我想找到一个有效的解决方案,它不涉及 运行 再次在整个列表上循环并从每个索引中删除 '\n'。

扩展输出:

'Emma', 'F', '20799', 'Olivia', 'F', '19674', 'Sophia', 'F', '18490', 'Isabella', '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'
sum((s.split('\n') for s in data), [])

['Emma', 'F', '20799', 'Olivia', 'F', '19674', 'Sophia', 'F', '18490', 'Isabella', 'F', '16950', 'Ava', 'Emma', 'F', '20799', 'Olivia', 'F', '19674', 'Sophia', 'F', '18490', 'Isabella', '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', 'Sophia', 'F', '18490', 'Isabella', 'F', '16950', 'Ava', 'Emma', 'F', '20799', 'Olivia', 'F', '19674', 'Sophia', 'F', '18490', 'Isabella', 'F', '16950', 'Ava']

我认为您试图用定界符替换“\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

我不知道你的文件是什么样的,但我看到你从来没有使用过 newDict 所以你只是 return 最后处理的文件

试试看下面是不是更接近你想要的

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)

很简单,在你的 code.I 中使用 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

请参考下面的代码和输出如果有更多的困惑there.To很容易理解我根据你的输入执行了下面的代码

代码:

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

输出:

['Olivia', 'F', '19674', 'Sophia', 'F', '18490', 'Isabella', 'F', '16950']

我的文本文件 trystack.txt 包含:

艾玛 F 20799

奥利维亚 F 19674

索菲亚 F 18490

伊莎贝拉 F 16950

这将帮助您实现所需,即删除 '\n'

谢谢

使用data.strip()从字符串中删除‘\n’