我正在尝试创建一个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 ;.
为什么我不能让;与每一行内联,而不是把它放到第二行呢?有什么建议吗?:)提前谢谢!
发布于 2017-05-24 03:11:34
您从imageFile中读取的每一行都包含一个换行符。因此,用它作为HEX,就会在分号前面放一个换行符。由于.write不会自动添加另一个换行符,这就是为什么新行看起来只是被移动的原因。您需要的是去掉旧行中的换行符,并将其添加到新行中:
for line in imageFile:
mifFile.write(makeAddress(address, line.strip()) + "\n")
address = address + 1;发布于 2017-05-24 03:36:00
下面是您的代码的修改版本,可以工作。在您的示例中,每个数字之间有一个空行,因此我添加了一个测试来处理这个问题,因为这将导致不正确的输出。
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()发布于 2017-05-24 03:13:21
使用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;https://stackoverflow.com/questions/44148266
复制相似问题