いろは3010814 views
高校化学2924392 views
教育149510 views
雑学1473612 views
ヒストリア290598 views
LaTeX962153 views
高校日本史190571 views
MathPython497343 views
中学理科1630641 views
中学社会668760 views
Help
Tools
NewsSpreadsheetCalendarSlidesTier ListPen ToolIllustrationCrayonPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchSwirl EffectOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksWater RippleWater SplashBreaking GlassWood GrainMarble TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsCross SectionsMotion PathMechanicsWavesElectromagnetic WavesLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHPeriodic TableComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseMuscle ContractionRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic TheoryShogi StrategyPiano Rhythm Game

English

Python の with 文でファイルを安全に扱う

ファイル操作は with 文の最も代表的な使用例です。ファイルを開いたら必ず閉じる必要がありますが、with 文を使えば自動的に処理してくれます。

基本的なファイル読み込み

with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)
# ブロック終了時に自動で f.close() が呼ばれる

with ブロックを抜けた時点で、ファイルは確実に閉じられます。

with 文を使わない場合の問題

with を使わないと、様々な問題が発生する可能性があります。

# 危険な例
f = open("data.txt", "r")
content = f.read()  # ここで例外が発生したら...
f.close()           # close() が呼ばれない!

例外が発生すると close() が実行されず、ファイルが開いたままになります。これを防ぐには try-finally が必要です。

# 安全だが冗長
f = open("data.txt", "r")
try:
    content = f.read()
finally:
    f.close()

with 文を使えば、この try-finally パターンが自動的に適用されます。

ファイル書き込み

書き込みの場合も同様に安全に扱えます。

with open("output.txt", "w", encoding="utf-8") as f:
    f.write("Hello, World!\n")
    f.write("こんにちは\n")

書き込みモードでは、close() が呼ばれる際にバッファがフラッシュされるため、すべてのデータが確実にファイルに書き込まれます。

行単位の読み込み

ファイルオブジェクトはイテラブルなので、for 文で1行ずつ処理できます。

with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

この方法は、大きなファイルでも1行ずつメモリに読み込むため効率的です。

例外が発生しても安全

with ブロック内で例外が発生しても、ファイルは必ず閉じられます。

try:
    with open("data.txt", "r") as f:
        content = f.read()
        raise ValueError("何かエラー")  # 例外発生
except ValueError as e:
    print(f"エラー: {e}")
# 例外が発生しても f.close() は呼ばれている

バイナリファイルの処理

画像やバイナリデータも同様に扱えます。

# バイナリ読み込み
with open("image.png", "rb") as f:
    data = f.read()

# バイナリ書き込み
with open("copy.png", "wb") as f:
    f.write(data)

ファイル操作では常に with 文を使う習慣をつけましょう。リソースリークを防ぎ、コードも簡潔になります。