使用python写入文件将内容移动到新行

时间:2017-05-24 03:06:11

标签: python file

我正在尝试创建一个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

     

...

为什么我不能;内联每行而不是第二行?有小费吗? :)非常感谢提前!

3 个答案:

答案 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;