我有一个我用两个部分创建的程序。
第一个以此格式复制文件名中间带有整数的文本文件。
file = "Filename" + "str(int)" + ".txt"
用户可以创建他们想要的文件副本。
该计划的第二部分是我遇到的问题。文件最底部有一个整数,与文件名中的整数对应。第一部分完成后,我以"r+"
读/写格式一次打开一个文件。所以我可以file.seek(1000)
来了解整数在文件中的位置。
现在我认为下一部分应该很简单。我应该只需要在这里写入str(int)到文件中。但这并不容易。它在家里的Linux中工作得很好,但在Windows上工作却很困难。在file.seek(1000)
之后我最终要做的就是使用Unicode UTF-8写入文件。我用这个程序其余部分的代码片段完成了这个。我将记录它,以便能够理解发生了什么。我不想用Unicode写这个,而是希望能用优秀的常规英文ASCII字符来写这个。最终,该程序将扩展为在每个文件的底部包含更多数据。必须以Unicode编写数据会使事情变得非常困难。如果我只是编写数据而不将其转换为Unicode,那么结果就是这样。该字符串应该说#2 =1534
,而不是#2 =ㄠ㌵433.
如果有人能告诉我我做错了什么就会很棒。我很乐意使用file.write('1534')
之类的东西将数据写入文件,而不必使用Unicode UTF-8。
while a1 < d1 :
file = "file" + str(a1) + ".par"
f = open(file, "r+")
f.seek(1011)
data = f.read() #reads the data from that point in the file into a variable.
numList= list(str(a1)) # "a1" is the integer in the file name. I had to turn the integer into a list to accomplish the next task.
replaceData = '\x00' + numList[0] + '\x00' + numList[1] + '\x00' + numList[2] + '\x00' + numList[3] + '\x00' #This line turns the integer into Utf 8 Unicode. I am by no means a Unicode expert.
currentData = data #probably didn't need to be done now that I'm looking at this.
data = data.replace(currentData, replaceData) #replaces the Utf 8 string in the "data" variable with the new Utf 8 string in "replaceData."
f.seek(1011) # Return to where I need to be in the file to write the data.
f.write(data) # Write the new Unicode data to the file
f.close() #close the file
f.close() #make sure the file is closed (sometimes it seems that this fails in Windows.)
a1 += 1 #advances the integer, and then return to the top of the loop
答案 0 :(得分:2)
这是用ASCII写入文件的示例。您需要以字节模式打开文件,并使用字符串的.encode方法是获得所需最终结果的便捷方式。
s = '12345'
ascii = s.encode('ascii')
with open('somefile', 'wb') as f:
f.write(ascii)
如果文件已经存在,显然你也可以在你的情况下以rb +(读写字节模式)打开。
with open('somefile', 'rb+') as f:
existing = f.read()
f.write(b'ascii without encoding!')
您也可以使用b前缀传递字符串文字,它们将使用ascii进行编码,如第二个示例所示。