Python 基礎 テキストファイル操作
メモ。テキストファイル操作いろいろ。
#テキストデータを読み込む file="./test/fox.txt" # "test/fox.txt" でも可 fileobj=open(file) text=fileobj.read() fileobj.close() print(text) print("-----------") #with-asを使ってファイル処理 close()が不要 file="./test/fox.txt" # "test/fox.txt" でも可 with open(file) as fileobj: text=fileobj.read() print(text) print("-----------") #10文字ずつ読み込む file="./test/fox.txt" with open(file,"r",encoding="shift_jis") as fileobj: while True: text=fileobj.read(10) #10文字ずつ読み込む if text: print(text) else: break #読み込みを終了する print("-----------") #1行ずつ読み込む file="test/test01.txt" with open(file,"r",encoding="shift_jis") as fileobj: while True: line=fileobj.readline() #1行読み込む aline=line.rstrip() #改行を取り除く if aline: print(aline) else: break #読み込みを終了する print("-----------") #文字を検索する ファイルオブジェクトをイテレータとして操作 file="test/test01.txt" target="x" with open(file,"r",encoding="shift_jis") as fileobj: while True: try: line=next(fileobj) #イテレータから1行取り出す if line.find(target)>=0: print(f"『{target}』が見つかりました。") print(line,end="") #,end="" 改行コードを消す break except StopIteration: print(f"『{target}』が見つかりませんでした。") #『x』が見つかりました。 #ddxdd print("-----------") file="test/test01.txt" with open(file,"r",encoding="shift_jis") as fileobj: for i,line in enumerate(fileobj): #ファイルオブジェクトから1行ずつ取り出す if line=="\n": continue #改行コードのみはスキップ aline = line.replace('\n','') #改行コード削除 aline = aline.replace('\r','') #改行コード削除 print(f"{i}:{aline}") #0:aaaaa #1:bbbbb #2:ccccc #3:ddxdd #4:eeeee #5:fffff print("-----------") file="test/numdata.txt" limit=2.0 with open(file,"r",encoding="shift_jis") as fileobj: for i,line in enumerate(fileobj): #ファイルオブジェクトから1行ずつ取り出す if line=="\n": continue #改行コードのみはスキップ aline = line.replace('\n','') #改行コード削除 aline = aline.replace('\r','') #改行コード削除 datalist=aline.split(",") #リストにします #limit以下の時1 大きい時0に変換する trueの時1を返す falseの時0を返す result=[int(float(num)<=limit) for num in datalist] #リスト内包表記 print(f"{i}:{result}") #0:[0, 0, 1] #1:[0, 0, 0] #2:[0, 0, 1] #3:[0, 1, 0] #numdata.txt #4.69, 2.06, 0.75 #5.92, 2.22, 9.36 #8.17, 5.11, 1.14 #6.26, 0.37, 6.73 print("-----------") #ファイルをダイアログで選ぶ import tkinter as tk import tkinter.filedialog as fd root=tk.Tk() root.withdraw() file=fd.askopenfilename( title="ファイルを選択して下さい", filetype=[("text","txt")]) if file: with open(file,"r",encoding="shift_jis") as fileobj: text=fileobj.read() print(text) #=====書き込み===== #ファイルへの書き込み file="./test/sample01.txt" # "test/sample01.txt" でも可 fileobj=open(file, "w", encoding="shift_jis") #"w"上書きモードで開きます fileobj.write("こんにちは\n") fileobj.write("Pythonをはじめよう\n") fileobj.close() #ファイルへの書き込み file="./test/sample01.txt" # "test/sample01.txt" でも可 fileobj=open(file, "a", encoding="shift_jis") #"a"追記モードで開きます fileobj.write("こんばんは\n") fileobj.write("Pythonで追記です\n") fileobj.close() #with-asを使ってファイル処理 close()が不要 file="./test/sample01.txt" # "test/sample01.txt" でも可 with open(file, "a", encoding="shift_jis") as fileobj: #"a"追記モードで開きます fileobj.write("はじめまして\n") fileobj.write("またPythonで追記です\n") #ファイル、フォルダの存在判定をする import os from random import randint folder="./test2/" file=folder + "sample02.txt" def filewrite(): with open(file, "w", encoding="shift_jis") as fileobj: num=randint(0,100) fileobj.write(f"{num}が出ました。") print("ファイルを保存しました。") if os.path.exists(file): #ファイルが存在するなら filewrite() else: if not os.path.exists(folder): #フォルダがないなら作成 os.makedirs(folder) filewrite()