我必须从文件中读取并且对于分隔符之间的每个数据我需要删除空格并且我已经在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()
所以我做了一些修改并添加了file.seek所以我可以重写源代码行并且它在某种程度上工作,除了它在末尾添加两个额外的行,这意味着搜索部分的一些问题。
修改后的程序是
filesrc = open('c:/ODI_FILE/split_doc.txt','r+')
lines=0
for list in filesrc.readlines():
#split the records by the delimiter
fields = list.split(',')
list = ",".join([s.strip() for s in fields])
filesrc.seek(lines)
filesrc.writelines(list+"\n")
lines += len(list+"\n")
filesrc.close()
请帮我正确理解。
带有额外空格的正确源文件
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循环?
答案 0 :(得分:1)
您不想在阅读时写入同一文件。这在技术上是可行的,但这条道路充满了麻烦和痛苦。
以下是您应遵循的简单明了的流程:
如果您不想立即将整个文件加载到内存中,请尝试以下过程:
我的建议是以两种方式编写它,看看哪些有效或无效,哪种方式更快,而不是假设你无法将它全部读入内存只是因为它是数百万行。也许它会运作得很好。
此外,你当然可以使用while循环来完成这项工作。为此,您需要以while循环的形式阅读Python文档并进行一些实验。如何编写该循环将取决于您如何加载文件:一次性加入一个字符串然后拆分成一个列表,或直接从文件中逐行。对于这两种情况,你怎么知道while循环必须做多少工作,你将如何从一件作品前进到另一件作品,你怎么知道它什么时候完成?如果你能回答这些问题,你可以写下你的循环。
答案 1 :(得分:0)
你正在覆盖,但是你的最终结果比原来短,所以你得到了原始流血的最后X个字符,其中X是从原始版本到新版本的大小差异。此版本中额外的.seek()和truncate()调用将寻找新输出的结尾并切断文件的其余部分。
filesrc = open('c:/ODI_FILE/split_doc.txt','r+')
lines=0
for list in filesrc.readlines():
#split the records by the delimiter
fields = list.split(',')
list = ",".join([s.strip() for s in fields])
filesrc.seek(lines)
filesrc.writelines(list+"\n")
lines += len(list+"\n")
filesrc.seek(lines)
filesrc.truncate()
filesrc.close()
答案 2 :(得分:0)
这不能回答你的问题,但是你有没有考虑过用jython做这个?
尝试Sed?