在 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’
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’