事務屋さんの備忘録

主にプログラミングのことを書いていきます。メモというか備忘録的な感じで。プログラミングといっても、私はプロのエンジニアでも本職のプログラマーでもありません。単なる事務職をやってるサラリーマンで、空いた時間にちょこちょこっとプログラミングしてる程度です。よってこのブログに記載したことが誤っていたり、もっとよい方法がある場合もあると思います。その場合には、ご指摘いただけると嬉しいです。また、このブログを読んで役に立った、なんて方がいらっしゃったら幸いですね。

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()