gpt4 book ai didi

python - 删除文件中的多个 EOL

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:48 55 4
gpt4 key购买 nike

我有一个包含\n EOL 字符的制表符分隔文件,看起来像这样:

User Name\tCode\tTrack\tColor\tNote\n\nUser Name2\tCode2\tTrack2\tColor2\tNote2\n

我正在获取此输入文件并使用 split('\t') 将其重新格式化为嵌套列表。该列表应如下所示:

[['User Name','Code','Track','Color','Note'],
['User Name2','Code2','Track2','Color2','Note2']]

生成文件的软件允许用户在填写“备注”字段时按任意次数的“回车”键。它还允许用户按“输入”键创建任意数量的换行符,而无需在“注释”字段中输入任何可见文本。

最后,用户可以在“注释”中间按任意多次“输入”创建多个段落,但从操作的角度来看,这种情况很少见,所以我愿意不考虑这种可能性如果它使代码复杂化很多。这种可能性的优先级真的非常低。

如上面的示例所示,这些操作会导致在“注释”字段之前、尾随或替换任意长度的“\n\n...”代码序列。或者这样说,在我将文件对象放入列表之前需要进行以下替换:

\t\n\n... preceding "Note" must become \t
\n\n... trailing "note" must become \n
\n\n... in place of "note" must become \n
\n\n... in the middle of the text note must become a single whitespace, if easy to do

我试过使用 strip() 和 replace() 方法但没有成功。是否需要先将文件对象复制到其他对象中,然后才能对其使用 replace() 方法?

我有使用 Awk 的经验,但我希望这不需要正则表达式,因为我是 Python 的新手。这是我需要改进以解决多个换行符的代码:

marker = [i.strip() for i in open('SomeFile.txt', 'r')]

marker_array = []
for i in marker:
marker_array.append(i.split('\t'))

for i in marker_array:
print i

最佳答案

计数选项卡;如果您假设注释字段的一行中从来没有 4 个制表符,您可以收集注释,直到找到确实有 4 个制表符的行:

def collapse_newlines(s):
# Collapse multiple consecutive newlines into one; removes trailing newlines
return '\n'.join(filter(None, s.split('\n')))

def read_tabbed_file(filename):
with open(filename) as f:
row = None
for line in f:
if line.count('\t') < 4: # Note continuation
row[-1] += line
continue

if row is not None:
row[-1] = collapse_newlines(row[-1])
yield row

row = line.split('\t')

if row is not None:
row[-1] = collapse_newlines(row[-1])
yield row

上面的生成器函数不会产生一行,直到确定下一行没有继续的音符,有效地向前看。

现在使用 read_tabbed_file() 函数作为生成器并遍历结果:

for row in read_tabbed_file(yourfilename):
# row is a list of elements

演示:

>>> open('/tmp/test.csv', 'w').write('User Name\tCode\tTrack\tColor\tNote\n\nUser Name2\tCode2\tTrack2\tColor2\tNote2\n')
>>> for row in read_tabbed_file('/tmp/test.csv'):
... print row
...
['User Name', 'Code', 'Track', 'Color', 'Note']
['User Name2', 'Code2', 'Track2', 'Color2', 'Note2']

关于python - 删除文件中的多个 EOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17542077/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com