ホームページ バックエンド開発 Python チュートリアル Python で固定幅ファイルを効率的に解析する方法: 構造体モジュールと最適化された文字列スライス?

Python で固定幅ファイルを効率的に解析する方法: 構造体モジュールと最適化された文字列スライス?

Oct 31, 2024 pm 03:43 PM

How to Efficiently Parse Fixed Width Files in Python: Struct Module vs. Optimized String Slicing?

固定幅ファイルの効率的な解析

固定幅ファイルには、あらかじめ決められた列長があるため、解析に特有の課題が生じます。このようなファイルからデータを抽出する効率的な方法を見つけることは、データ処理にとって非常に重要です。

問題ステートメント

ファイルに固定幅の行があり、各列が特定の値を表すとします。 、これらの行を個別のコンポーネントに解析する効率的な方法を開発します。現在、文字列スライスが採用されていますが、その可読性と大きなファイルへの適合性について懸念が生じます。

解決策

2 つの効率的な解析方法が提示されています:

方法 1: struct モジュールを使用する

Python 標準ライブラリの struct モジュールは、バイナリ データ ストリームからデータを解凍する便利な方法を提供します。各フィールドの幅とタイプを指定する書式文字列を定義することで、固定幅ファイルで使用できます。この方法は、速度とシンプルさの両方を実現します。

例:

<code class="python">import struct

fieldwidths = (2, -10, 24)
fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's') for fw in fieldwidths)

# Convert Unicode input to bytes and the result back to Unicode string.
unpack = struct.Struct(fmtstring).unpack_from  # Alias.
parse = lambda line: tuple(s.decode() for s in unpack(line.encode()))

print('fmtstring: {!r}, record size: {} chars'.format(fmtstring, struct.calcsize(fmtstring)))

line = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n'
fields = parse(line)
print('fields: {}'.format(fields))</code>
ログイン後にコピー

方法 2: コンパイルで文字列スライスを使用する

文字列のスライスは簡単に見えるかもしれませんが、eval() を使用してより効率的なバージョンをコンパイルすることで速度を向上させることができます。このメソッドは、一定のスライス境界のリストを生成するため、実行が高速になります。

(最適化):

<code class="python">def make_parser(fieldwidths):
    cuts = tuple(cut for cut in accumulate(abs(fw) for fw in fieldwidths))
    pads = tuple(fw < 0 for fw in fieldwidths) # bool flags for padding fields
    flds = tuple(zip_longest(pads, (0,)+cuts, cuts))[:-1]  # ignore final one
    slcs = ', '.join('line[{}:{}]'.format(i, j) for pad, i, j in flds if not pad)
    parse = eval('lambda line: ({})\n'.format(slcs))  # Create and compile source code.
    # Optional informational function attributes.
    parse.size = sum(abs(fw) for fw in fieldwidths)
    parse.fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's')
                                                for fw in fieldwidths)
    return parse</code>
ログイン後にコピー

どちらのメソッドも効率的な解析方法を提供します。固定幅ファイル。 struct モジュールを使用する方法 1 は使いやすいですが、最適化された文字列スライスを使用する方法 2 は、最適化するとパフォーマンスがわずかに向上します。

以上がPython で固定幅ファイルを効率的に解析する方法: 構造体モジュールと最適化された文字列スライス?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonでファイルをダウンロードする方法 Pythonでファイルをダウンロードする方法 Mar 01, 2025 am 10:03 AM

Pythonでファイルをダウンロードする方法

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

Natural Language Toolkit(NLTK)の紹介 Natural Language Toolkit(NLTK)の紹介 Mar 01, 2025 am 10:05 AM

Natural Language Toolkit(NLTK)の紹介

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

See all articles