我必须从一个文件中读取,对于每个分隔符之间的数据,我需要删除空白,我已经用jython编写了以下程序
当我试图重写时,它在源文件的末尾重写。在
filesrc = open('c:/FILE/split_doc.txt','r+')
for list in filesrc.readlines():
#split the records by the delimiter
fields = list.split(',')
list = ",".join([s.strip() for s in fields])
filesrc.writelines(list+"\n")
filesrc.close()
所以我做了一些修改并添加了文件.seek所以我可以重写源代码行,它在某种程度上起到了一定的作用,只是在末尾添加了两行,这意味着seek部分有问题。在
修改后的程序是
^{pr2}$请帮我弄清楚正确的逻辑。
带有额外空白的正确源文件
52 ,William ,Kudo ,28/03/199300:00:00
11,Andrew, Andersen,22/02/199900:00:00
12,John ,Galagers,20/04/200000:00:00
13,Jeffrey ,Jeferson,10/06/198800:00:00
20,Jennie,Daumesnil,28/02/198800:00:00
21,Steve,Barrot,24/09/199200:00:00
22,Mary,Carlin,14/03/199500:00:00
30,Paul,Moore,11/03/199900:00:00
这是我的错误输出
52,William,Kudo,28/03/199300:00:00
11,Andrew,Andersen,22/02/199900:00:00
12,John,Galagers,20/04/200000:00:00
13,Jeffrey,Jeferson,10/06/198800:00:00
20,Jennie,Daumesnil,28/02/198800:00:00
21,Steve,Barrot,24/09/199200:00:00
22,Mary,Carlin,14/03/199500:00:00
30,Paul,Moore,11/03/199900:00:00
9500:00:00
30,Paul,Moore,11/03/199900:00:00
最后两行本不该来的
请建议所需的和更快的方法,因为这是一个示例文件,我必须让这个程序为数百万行工作。
有没有办法让这个逻辑也和while循环一起工作?
你正在重写,但是你的最终结果比原来的要短,所以你得到了原始版本的最后X个字符,其中X是原始版本和新版本的大小差异。此版本中额外的.seek()和truncate()调用将搜索到新输出的末尾,并切断文件的其余部分。在
这并不能回答您的问题,但您是否考虑过不使用jython?在
尝试使用Sed?在
你不想在读同一个文件时写入它。这在技术上是可能的,但这条路充满了麻烦和痛苦。在
以下是简单明了的流程:
如果不想一次将整个文件加载到内存中,请尝试以下过程:
我的建议是两种方式都写,看看哪些行有效或无效,哪种方式更快,而不是假设你不能仅仅因为它有数百万行就把它全部读入内存。也许它会很好的。在
另外,您当然也可以使用while循环来实现这一点。为此,您需要阅读while循环形式的Python文档并做一些实验。如何编写循环取决于如何加载文件:一次将所有文件加载到一个字符串中,然后拆分为一个列表,或者直接从文件中逐行加载。对于这两种情况,您如何知道while循环将要做多少工作,如何从一项工作前进到下一项工作,以及如何知道何时完成?如果你能回答这些问题,你就可以写你的循环。在
相关问题 更多 >
编程相关推荐