只读一次文件

时间:2014-09-01 03:49:37

标签: python

我在Java中创建了一个脚本,该脚本将以下(java)列表写入文件:

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

我的Python脚本需要 READ 该文件,如下所示,无需修改文件或创建新文件:

-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']

正如您所看到的,该过程尚未结束,我需要删除括号和引号,使执行速度变慢。

我尝试的事情:

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

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

2 个答案:

答案 0 :(得分:2)

这似乎是XY problem。我怀疑您可以直接从Java程序中更轻松地创建正确的输出。如果您需要帮助,请使用您的Java代码发布一个新问题,说明您要在那里做什么。

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

要解决此问题,您可以迭代split()的结果并手动打印出每个元素:

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

这将在每行的末尾留下额外的空间。通过一些工作,如果需要,您应该能够解决该问题。

答案 1 :(得分: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")

这将使您的单行9,000,000项java列表文字并将其转换为您在新文件中要求的表格。