首页 > 解决方案 > 在每个元素的位置替换字符

问题描述

我有一个填充数据的 txt 文件,我想将文本的每一行写入DATAPython 中调用的列表的元素,每一行/元素如下所示:

data[0] = EPH21 2017-05-05T00:30    2375.50 2376.50 2375.50 2376.50 712 0
data[1] = EPH21 2017-05-05T01:00    2376.50 2376.75 2375.50 2375.75 821 0
data[2] = EPH21 2017-05-05T01:30    2376.00 2376.00 2374.75 2375.25 1453 0

我想将每一行/元素修改为有","而不是空格,所以它看起来像一个 CSV 文件。我也想用“替换"T"时间戳中包含的内容",。最后我想将修改后的列表写入一个新的文本文件。

更改后,我希望我的列表如下所示:

data[0] = EPH21,2017-05-05,00:30,2375.50,2376.50,2375.50,2376.50,712,0
data[1] = EPH21,2017-05-05,01:00,2376.50,2376.75,2375.50,2375.75,821,0
data[2] = EPH21,2017-05-05,01:30,2376.00,2376.00,2374.75,2375.25,1453,0

我怎样才能做到这一点?我试过这段代码,但到目前为止没有运气:

file = open("EPH21_30 Minutes.txt", "r")
data = []
for line in file:
    data.append(line)
    
for element in data:
    element.replace(" ", ",")
    element.replace("T", ",")

MyFile = open('output.txt','w')
for element in data:
    MyFile.write(element)
    MyFile.write('\n')
MyFile.close()

标签: pythonlistreplacereadfile

解决方案


字符串是不可变的。str.replace返回新的值,它不会更改原始字符串。

所以问题出在这部分:

for element in data:
    element.replace(" ", ",")
    element.replace("T", ",")

保持你的结构,它应该是这样的:

result = []
for element in data:
    tmp = element.replace(" ", ",")
    tmp = tmp.replace("T", ",")
    result.append(tmp)

缩短的解决方案:使用列表推导:

with open("EPH21_30 Minutes.txt", "r") as file:
    data = [line.replace(" ", ",").replace("T", ",") for line in file]

with open('output.txt','w') as MyFile:
    for element in data:
        MyFile.write(element)
        MyFile.write('\n')

[我也曾经with自动关闭文件,因为您似乎没有关闭输入文件。]


推荐阅读