只读取一个文件

2024-03-28 08:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我尝试过的事情:

  • Enumerate():但它无法识别格式
  • 用Java编写列表作为所需的输出:将每个项附加到文件中需要很长时间。你知道吗
  • 将coma的位置存储在一个列表中,并使用find()函数通过字符串循环:但是算法在文件上循环两次。你知道吗

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


Tags: 文件字符串in脚本列表forinputdata
2条回答
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 list literal,并将其转换为新文件中所需的表。你知道吗

这看起来像一个XY problem。我怀疑您可以更容易地直接从Java程序创建正确的输出。如果你想在这方面得到帮助,请用你的Java代码发布一个新问题,说明你在那里尝试做什么。你知道吗

要直接回答这个问题,问题是print()调用str()来创建列表的字符串表示。这将添加括号和逗号。很可能是对列表元素的str()的递归调用在字符串元素周围添加单引号。你知道吗

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

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

这将在每行的末尾留下额外的空间。只要做一点工作,你就可以解决这个问题,如果需要的话。你知道吗

相关问题 更多 >