【发布时间】:2013-07-06 16:43:21
【问题描述】:
我有一个带有 \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']]
生成文件的软件允许用户在填写“备注”字段时按“输入”键任意次数。它还允许用户按“回车”创建任意数量的换行符,而无需在“注释”字段中输入任何可见文本。
最后,用户可以在“Note”中间按“enter”任意次,创建多个段落,但从操作的角度来看,这种情况非常罕见,我愿意不考虑这种可能性如果它使代码复杂得多。这种可能性真的非常低优先级。
从上面的示例中可以看出,这些操作可能会导致一系列“\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
【问题讨论】:
-
可以修改生成
SomeFile.txt的软件吗?如果是这样,它是用 Python 编写的吗? -
用户也可以在备注字段中输入标签吗?
-
如果您使用
csv模块来写入此数据并正确引用注释字段,将会有所帮助。 -
生成文本文件的软件不是Python写的。修改它不是一种选择。