python寫入位元組
⑴ 用python寫入文件,若該行數據存在則不寫入;若不存在,則寫入。怎麼才能在寫入之前判斷該數據是否存在
用open,該函數創建一個文件對象,這將用來調用與之關聯的其他支持方式即可:
file object = open(file_name [, access_mode][, buffering])
file_name: file_name參數是一個字元串值,包含要訪問的文件的名稱。
access_mode: access_mode決定了文件必須被打開,即,讀,寫,追加等的可能值是下表中給定的一個完整的列表的模式。這是可選參數,默認文件存取方式為read (r)。
(1)python寫入位元組擴展閱讀:
file命令的函數意義:
file 命令讀取用 File 參數或者 FileList 變數指定的文件,在每個文件上執行一系列測試,然後將它們按照類型分類。然後此命令將文件類型寫入標准輸出。文件可以是常規文件、目錄、FIFO(指定的管道)、塊特殊文件、字元特別文件、符號鏈接或者套接字類型。
1、對於長度為零的常規文件,將識別為空文件。
2、對於符號鏈接文件,預設情況下此鏈接後跟符號鏈接引用的文件。
如果文件是 ASCII 碼的格式,則 file 命令將檢查前 1024 個位元組然後確定文件類型。如果文件不是 ASCII 格式,則 file 命令將嘗試區分二進制數據文件和包含擴展字元的文本文件。
⑵ python怎麼修改某個內存地址的數據
使用ctypes模塊調用WriteProcessMemory函數,在創建程序進程後,就可以修改該程序指定內存地址。WriteProcessMemory的函數原型如下所示。
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten
);
其參數含義如下。
· hProcess:要寫內存的進程句柄。
· lpBaseAddress:要寫的內存起始地址。
· lpBuffer:寫入值的地址。
· nSize:寫入值的大小。
· lpNumberOfBytesWritten :實際寫入的大小。
python代碼示例如下:
fromctypesimport*
#定義_PROCESS_INFORMATION結構體
class_PROCESS_INFORMATION(Structure):
_fields_=[('hProcess',c_void_p),
('hThread',c_void_p),
('dwProcessId',c_ulong),
('dwThreadId',c_ulong)]
#定義_STARTUPINFO結構體
class_STARTUPINFO(Structure):
_fields_=[('cb',c_ulong),
('lpReserved',c_char_p),
('lpDesktop',c_char_p),
('lpTitle',c_char_p),
('dwX',c_ulong),
('dwY',c_ulong),
('dwXSize',c_ulong),
('dwYSize',c_ulong),
('dwXCountChars',c_ulong),
('dwYCountChars',c_ulong),
('dwFillAttribute',c_ulong),
('dwFlags',c_ulong),
('wShowWindow',c_ushort),
('cbReserved2',c_ushort),
('lpReserved2',c_char_p),
('hStdInput',c_ulong),
('hStdOutput',c_ulong),
('hStdError',c_ulong)]
NORMAL_PRIORITY_CLASS=0x00000020#定義NORMAL_PRIORITY_CLASS
kernel32=windll.LoadLibrary("kernel32.dll")#載入kernel32.dll
CreateProcess=kernel32.CreateProcessA#獲得CreateProcess函數地址
ReadProcessMemory=kernel32.ReadProcessMemory#獲得ReadProcessMemory函數地址
WriteProcessMemory=kernel32.WriteProcessMemory#獲得WriteProcessMemory函數地址
TerminateProcess=kernel32.TerminateProcess
#聲明結構體
ProcessInfo=_PROCESS_INFORMATION()
StartupInfo=_STARTUPINFO()
file='ModifyMe.exe'#要進行修改的文件
address=0x0040103c#要修改的內存地址
buffer=c_char_p("_")#緩沖區地址
bytesRead=c_ulong(0)#讀入的位元組數
bufferSize=len(buffer.value)#緩沖區大小
#創建進程
ifCreateProcess(file,0,0,0,0,NORMAL_PRIORITY_CLASS,0,0,byref(StartupInfo),byref(ProcessInfo)):
#讀取要修改的內存地址,以判斷是否是要修改的文件
ifReadProcessMemory(ProcessInfo.hProcess,address,buffer,bufferSize,byref(bytesRead)):
ifbuffer.value=='x74':
buffer.value='x75'#修改緩沖區內的值,將其寫入內存
#修改內存
ifWriteProcessMemory(ProcessInfo.hProcess,address,buffer,bufferSize,byref(bytesRead)):
print'成功改寫內存!'
else:
print'寫內存錯誤!'
else:
print'打開了錯誤的文件!'
TerminateProcess(ProcessInfo.hProcess,0)#如果不是要修改的文件,則終止進程
else:
print'讀內存錯誤!'
else:
print'不能創建進程!'
⑶ python write和writelines的區別
python write和writelines的區別:
1、file.write(str)的參數是一個字元串,就是你要寫入文件的內容.
2、file.writelines(sequence)的參數是序列,比如列表,它會迭代幫你寫入文件。
⑷ python程序如何工作
隨著人工智慧時代的來臨,python成為了人們學習編程的首先語言。那麼,python程序怎麼運行的?我們下面來介紹下。
python程序執行原理
我們都知道,使用C,C++之類的編譯性語言編寫的程序,是需要從源文件轉換成計算機使用的機器語言,經過鏈接器鏈接之後形成了二進制可執行文件。運行該程序的時候,就可以二進製程序從硬碟載入到內存中並運行。
相關推薦:《Python教程》
但是對於Python而言,Python源碼不需要編譯成二進制代碼,它可以直接從源代碼運行程序。Python解釋器將源代碼轉換為位元組碼,然後把編譯好的位元組碼轉發到Python虛擬機(PVM)中進行執行。當我們運行Python程序的時候,Python解釋器會執行兩個步驟。
(1) 把源代碼編譯成位元組碼。編譯後的位元組碼是特定於Python的一種表現形式,它不是二進制的機器碼,需要進一步編譯才能被機器執行,這也是Python代碼無法運行的像C,C++一樣快的原因。如果Python進程在機器上擁有寫入許可權,那麼它將把程序的位元組碼保存為一個以.pyc為擴展名的文件,如果Python無法在機器上寫入位元組碼,那麼宇節碼將會在內存中生成並在程序結束時自動丟棄。在構建程序的時候最好給Python賦上在計算機上寫的許可權,這樣只要源代碼沒有改變,生成的.pyc文件可以重復利用,提高執行效率。
(2) 把編譯好的位元組碼轉發到Python虛擬機(PVM)中進行執行。PVM是Python Virtual Machine的簡稱,它是Python的運行引擎,是Python系統的一部分,它是迭代運行位元組碼指令的一個大循環,一個接一個地完成操作。