我在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']
正如您所看到的,该过程尚未结束,我需要删除括号和引号,使执行速度变慢。
我尝试的事情:
原始文件有900万个项目。所以,我的问题是:只能循环一次吗?
答案 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列表文字并将其转换为您在新文件中要求的表格。