width ファイルの操作

ファイルの操作
ファイルの操作で必要な機能:(当たり前)
書き込み
読み出し
です。ファイルの容量が小さければ、どんなへぼなプログラムでも問題ないです。 しかし、ファイルの容量が大きくなると読み出しや書き込みに時間がかかりイライラすることがあります。Pythonのファイル操作は他のOSと同じようになっています。簡単なサンプルです。

#-*- cording: utf-8 -*-
import os
from datetime import datetime

def usbMemoOs():
    now = datetime.now()
    date = "%04d%02d%02d" %(now.year, now.month, now.day)
    filename = '/media/pi/USBMEMO/' + 'OS'  + date + '.csv'
    fd = None
    if(os.path.exists(filename) == False):
        fd = os.open(filename, os.O_RDWR|os.O_CREAT )
    else:
        fd = os.open(filename, os.O_RDWR|os.O_APPEND )
    os.write(fd, b'abc\n')
    size = os.path.getsize(filename)

    #os.lseek(fd, os.SEEK_SET, 0)間違い
    os.lseek(fd, 0, os.SEEK_SET)#正解
    fileData = os.read(fd, size)
    print(fileData)
    os.close(fd)


def run():
    usbMemoOs()

if __name__ == "__main__":
    run()
訂正:
誤)
 os.lseek(fd, os.SEEK_SET, 0)
正)
 os.lseek(fd, 0, os.SEEK_SET)


ファイルに読み書きする関数はusbMemoOs()です。USBのファイルはどこにあるのだ?という疑問に対するサンプルです。
/media/pi/USBMEMO/
pi:ユーザー名(インストール時のデフォルトのままです)
USBMEMO:USBメモリーにつけた名前
ファイル名:OSyyyymmdd.csv  例:OS20210111.csv
 
これが大事です。
if(os.path.exists(filename) == False):

ファイルが無ければ新規作成します。あればファイルの最後に書き込みを追加します。
書き込み
 os.write(fd, b'abc\n')
このbはバイナリーのbです。8ビットのデータを意味します。

次に読み込みです。
1文字づづ読んで処理してもできます。しかし、時間がかかります。短時間で読み込みの処理を終えるには、ファイルと同じ大きさのメモリーを用意して、一度に読み込みます。ファイルの容量を取得するのが、os.path.getsize(filename)です。
最初に書き込みをしたので、ファイルポインタは最後になっています。ここで読み出しをしても何もなしです。os.lseek(fd, os.SEEK_SET, 0)でファイルポインタを先頭に戻します。そして読み込みをすればファイルの全部を読み出すことができます。

ところで
b'abc\n'
をファイルに書き込みますが、改行はどうなっているのでしょうか?テキストエディタでみるとちゃんと改行してるのがわかります。しかし、改行の正体はラインフィードなのかキャリッジリターンなのかわかりません。そこでバイナリエディタを使うと改行が何なのかわかります。