我正在尝试创建一个python程序来读取文件中的值,并将它们写入具有某种格式的另一个文件。让我充分解释我的任务!
我有一个十六进制图像像素值的文件。
AA
12
C5
95
...
我想将此值列表转换为这样的格式
0:AA;
1:12;
2:C5;
3:95;
...
我有以下代码
def makeAddress(address, HEX):
return str("\t%s : %s;" % (address, HEX));
imageFile = open("Image.txt", "r")
mifFile = open("INSTRUCTION_FILE.mif", "w")
address = 0;
for line in imageFile:
mifFile.write(makeAddress(address, line))
address = address + 1;
imageFile.close()
mifFile.close()
但是当我尝试运行这个程序时,输出是;
0:AA
1:12
2:C5
3:95
...
为什么我不能;
内联每行而不是第二行?有小费吗? :)非常感谢提前!
答案 0 :(得分:2)
您从imageFile读取的每一行都包含换行符。因此,将其用作HEX将在分号前面添加换行符。由于.write
不会自动添加另一个换行符,这就是为什么看起来刚刚移动换行符的原因。你需要的是从旧的换行中删除换行符并将其添加到新换行符中:
for line in imageFile:
mifFile.write(makeAddress(address, line.strip()) + "\n")
address = address + 1;
答案 1 :(得分:1)
以下是您的代码的修改版本。在您的示例中,每个数字之间都有一个空行,因此我添加了一个测试来处理它,因为这会导致输出不正确。
def makeAddress(address, HEX):
return str("\t%s : %s;" % (address, HEX));
imageFile = open("Image.txt", "r")
mifFile = open("INSTRUCTION_FILE.mif", "w")
address = 0;
for line in imageFile:
if line.strip(): # Checks if line is empty string
mifFile.write(makeAddress(address, line.strip()) + "\n")
address = address + 1;
imageFile.close()
mifFile.close()
答案 2 :(得分:0)
Pythonic方式,使用enumerate
返回包含索引的迭代器,并使用strip()
删除\n
,然后join
将返回一个字符串,这是串联序列中的字符串seq:
open("output.txt","w").write("\n".join(["{} : {};".format(i,j.strip()) for i,j in enumerate(open('input'))]))
如果您想要一种可读的方式,上面的代码就等同于:
with open('out.csv', 'r') as _input, open("output.txt", "w") as _output:
lines = ["{} : {};".format(i, j.strip()) for i, j in enumerate(_input)]
_output.write("\n".join(lines))
输出:
0 : AA;
1 : 12;
2 : C5;
3 : 95;