2014-09-01 105 views
-1

我在Java中做了一个脚本,写入一个文件下面的(JAVA)名单:阅读文件只一次

[-215 62 -155, -215 63 -155, -215 64 -155, -215 65 -155, -215 66 -155] 

我的Python脚本需要阅读该文件内容如下而不修改文件或创建一个新问题:

-215 62 -155 
-215 63 -155 
-215 64 -155 
-215 65 -155 
-215 66 -155 

我做了这个Python脚本将字符串转换到一个列表:

input_file = open('C:/test.txt', 'rb') 

for line in input_file: 
    blocks = line.split(",") 

#Delete brackets 
blocks[0] = blocks[0][1:] 
blocks[len(blocks)-1] = blocks[len(blocks)-1].strip()[:-1] 

for data in blocks: 
    print data.split() 

输出:

['-215', '62', '-155'] 
['-215', '63', '-155'] 
['-215', '64', '-155'] 
['-215', '65', '-155'] 
['-215', '66', '-155'] 

正如你所看到的过程还没有结束,我需要删除括号和引号使执行速度较慢。

事情我想:

  • 枚举(),但它不能识别的格式
  • 写列表中的Java所需的输出:追加每个项目的文件需要永远。
  • 将逗号的位置存储在列表中,并使用find()函数循环通过字符串:但算法在文件上循环两次。

原始文件有900万个项目。所以,我的问题是:只能循环一次吗?

+2

将'print data.split()[0:3]'更改为'打印数据'。 – 2014-09-01 04:23:09

+0

@ Code-Apprentice我的原始文件有2个更多的值,这就是为什么im切片,但我即将编辑该部分。谢谢! – Rosenthal 2014-09-01 04:25:45

+0

另外,使用多种语言解决此问题的原因是什么?也许你需要查看Java程序的输出,并让它直接创建正确的输出。听起来你已经尝试过了。继续使用Java代码发布一个新问题来说明您的问题。 – 2014-09-01 04:26:02

回答

2

这看起来像是XY problem。我怀疑你可以更容易地直接从Java程序创建正确的输出。如果您需要帮助,请使用您的Java代码发布一个新问题,以说明您在那里尝试执行的操作。

要直接回答此问题,问题是print()调用str()来创建列表的字符串表示形式。这增加了括号和逗号。对列表元素递归调用str()很可能会在字符串元素周围添加单引号。

要解决这个问题,你可以遍历split()的结果,并手动打印出每一个元素:

for data in blocks: 
    values = data.split() 
    for v in values: 
     print(v, end=" ") 
    print() 

这会在每行的末尾留下额外的空间。有了一点工作,如果需要,你应该能够解决这个问题。

+0

我正在使用Python 2.7 – Rosenthal 2014-09-01 04:39:42

+0

@syrux I我不确定是什么区别。确切的细节可能会改变(也许'end'不可用?),但一般的解决方案仍然是一样的:自己循环遍历split()。 – 2014-09-01 04:44:17

+0

我发现解决方案-print“,”.join(data.split()) - 感谢您的解释:“问题是print()调用str()来创建列表的字符串表示形式”非常感谢! – Rosenthal 2014-09-01 04:49:33

0
with open('path/to/file') as infile, open('path/to/output', 'w') as outfile: 
    for line in infile: 
     result = line.strip('[]') # strip out the beginning and ending brackets 
     for out_line in result.split(','): 
      outfile.write(out_line + "\n") 

这将带你单行9000000项Java列表的文字,把它变成你问了一个新的文件表。

+0

我可以问你我的问题有什么问题吗? – Rosenthal 2014-09-01 04:01:54

+0

你的答案是两步解决方案。我问我是否可以一次做到这一点。 – Rosenthal 2014-09-01 04:07:31

+0

@syrux再次阅读。我的解决方案只是一步。 – 2014-09-01 04:20:07