【Pythonクローラー開発の基礎③】Pythonの基礎(ファイル操作方法のまとめ)

注意: このコラムの記事はクローラーに偏っているため、Python のすべてをカバーすることは不可能ですが、ここでは重要なポイントのみに焦点を当てます。記載されていない点があると思われる場合は、追加してください〜

前回のおすすめ
【Python クローラー開発の基礎①】Python の基礎(変数と命名規則)
【Python クローラー開発の基礎②】Python の基礎(正規表現)
前回の記事で既に Python の正規表現についてお話しましたが、クローラーにおける Python データの読み書きは開発には必然的に関わることになりますが、今日は一連のファイル操作を見ていきましょう!



1 ファイルのエンコード

ファイルのエンコーディングとは何ですか?

  • ファイル エンコーディングとは、ファイルの読み取りおよび書き込み時にデータ型、文字セット、および形式が正しく識別されるように、テキストまたはバイナリ データをコンピュータ ファイルに保存する方法を指します。

  • テキスト ファイルの場合、ファイル エンコーディングによって、文字がバイト シーケンスにエンコードされる方法が決まります。一般的なテキスト ファイルのエンコーディングには、ASCII、UTF-8、GB2312、GBK、BIG-5などが含まれます。

  • バイナリ ファイルの場合、ファイル エンコーディングは、特定の形式でデータを表現するための規則と規則を定義します。たとえば、PNG 画像ファイルは「非圧縮ビットマップ」ベースのエンコード仕様を使用してピクセル データを保存しますが、PDF ファイルは Adob​​e Corporation が開発した PDF 言語を使用してエンコードされます。

ファイルエンコーディングを使用する理由

  • ファイルのエンコードによりデータの正確性が保証されます。異なる文字セットや形式は異なる方法でエンコードされる可能性があり、エンコードに失敗すると、テキスト コンテンツやバイナリ データの破損やフォーマット エラーが発生する可能性があります。
  • ファイル エンコーディングにより移植性が向上します。オペレーティング システムとソフトウェアが異なると、文字セットとエンコーディングのサポートが異なります。同じファイルを保存、読み取り、処理する場合、ファイル エンコーディングが正しいと、異なるプラットフォームやアプリケーション間でデータを確実に転送できます。互換性と相互運用性。
  • ファイルのエンコードによりストレージ スペースを節約できる: 一部のエンコード スキームには圧縮特性があり、ハードディスクやネットワーク送信中にデータが占有するスペースを最小限に抑えることができるため、作業効率が向上し、ストレージ コストが節約されます。

2 ファイルのオープン、クローズ、読み取り、書き込み、追加

Python でファイル操作を実行するには、組み込みopen()関数を使用してファイルを開いてファイル オブジェクトを返す必要があります。同時に、リソースの無駄やデータの破損を避けるために、ファイルを明示的にclose()閉じるメソッドを使用することも必要ですファイルの内容を読み書きするには、関連する読み取りおよび書き込み演算子を使用できます。

ファイルを開く:ファイルを開く関数を
使用します。この関数は、ファイル パスとオープン モード (読み取り、書き込み、追加を意味します) の 2 つのパラメーターを受け入れます。次に例を示します。open()"r""w""a"

f = open("file.txt", "r") # 以只读模式打开指定文件

ファイルを閉じる:開いているファイルを閉じるには、次のようなメソッドを
使用します。close()

f.close() # 关闭文件

ファイルの読み取り:ファイルの内容を読み取るにはまたはメソッド
を使用します。例:read()readline()readlines()

text = f.read() # 一次性读取整个文件内容到字符串中
line = f.readline() # 逐行读取文件内容(每次读取一行)
lines = f.readlines() # 返回所有行的列表

readlines()このメソッドは主にfororwhileループ内で使用されます

Write to file :メソッドを
使用して、write()コンテンツをファイルに書き込みます。たとえば、次のようになります。

f.write("hello world")

ファイルの読み取りおよび書き込み操作が完了したら、占有されているリソースを適時に解放しメモリ オブジェクトをディスクに保存する必要がありますしたがって、ファイル操作にはステートメント構造を使用しwithコードの実行後にファイルを自動的に閉じることをお勧めします。次に例を示します。

# 自动关闭文件并将文件内容写入到磁盘中
with open("file.txt", "w") as f:
    f.write("hello world")

追加操作:
モード a を通じて開きます。例:

f = open('python.txt', 'a')
  • ファイルが存在しない場合はファイルが作成されます
  • ファイルの存在はファイルの最後に追加されます

2.1 動作概要

操作する 関数
ファイルオブジェクト = open(ファイル、モード、エンコーディング) ファイルを開いてファイル オブジェクトを取得します (読み取りの場合は「r」、書き込みの場合は「w」、追加の場合は「a」)
ファイル object.read(num) 指定された長さのバイトを読み取ります (すべてのファイルを読み取るには num を指定しません)
ファイル object.readline() 一行読む
ファイル object.readlines() すべての行を読んでリストを取得する
ファイルオブジェクトの行の場合 ループファイル行の場合、1回のループで1行のデータが取得されます。
ファイルオブジェクト.close() ファイルオブジェクトを閉じる
open() を f として使用 with open 構文を使用してファイルを開きます。この構文は自動的に閉じることができます。

3 ファイル操作によく使用されるモジュール - os モジュール

Python の組み込みosモジュールは、オペレーティング システムと対話し、関連するファイルやディレクトリを操作するための機能を提供します。

一般的に使用されるものには次のようなものがあります。

os.chdir(path) :
現在の作業ディレクトリを指定されたディレクトリに変更します。例:

import os

# 改变当前工作目录到 /user/newdir
os.chdir("/user/newdir")

os.getcwd() :
現在の作業ディレクトリの文字列名を返します。例:

import os

# 输出当前工作目录
print(os.getcwd())

os.listdir([path]) :
指定されたパスにあるすべてのフォルダーとファイル名のリストを返します。次に例を示します。

import os

# 返回当前工作目录下的所有文件夹和文件
print(os.listdir())

os.mkdir(path) :
単一レベルのディレクトリを作成します。すでに存在する場合は、次のような例外がスローされます。

import os

# 创建/创建目录
os.mkdir("newdir")

os.makedirs(path) :
ディレクトリツリーを再帰的に作成します。すでに存在する場合は、次のような例外がスローされます。

import os

# 递归创建新目录if it doesn't already exist
os.makedirs("newdir/subdir")

os.remove(path) :
ファイルを削除します。例:

import os

# 删除一个文件
os.remove("file.txt")

os.rmdir(path) :
単一レベルのディレクトリを削除します。ディレクトリが空でない場合、次のように削除できません。

import os

# 删除目录"dirname"(注:目录必须是空的,否则无法删除)
os.rmdir("dirname")

os.rename(src, dst) :
ファイルまたはディレクトリの名前を変更/移動します。例:

import os

# 将文件重命名(可用于移动文件)
os.rename("oldname.txt", "newname.txt")

4 ファイル操作の共通モジュール - json モジュール

Python Web クローラーにおける json とそのアプリケーションとは何ですか

json モジュールは、JSON データを操作する簡単な方法を提供する Python の組み込みモジュールです。JSON (JavaScript Object Notation) は、サーバーから Web ページにデータを送信したり、あるプログラムから別のプログラムにデータを渡したりするためによく使用される軽量のデータ形式です。
JSON は Web クローリングで広く使用されています。Web クローラーは、Web サイトからデータをクロールし、これらのデータを JSON 形式に変換して、分析および処理できますJSON 形式はシンプルかつ明確で、解析、処理、送信が容易なため、Web クローラーでの使用に非常に適しています。

  1. json.dumps()

この関数は、Python オブジェクトを JSON 形式の文字列に変換するために使用されます。obj引数には、辞書、リスト、タプル、整数、浮動小数点数、ブール値、Noneその他の Python オブジェクトを使用できます。skipkeysensure_asciicheck_circularallow_nanclsdefaultindentseparatorsおよびsort_keysパラメータを使用して、変換中にさまざまなオプションやパラメータを設定できます。

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)

この関数の定義は上に示したとおりですが、この関数の使用方法を示す例を次に示します。

import requests
import json

url = 'https://jsonplaceholder.typicode.com/todos/1'
r = requests.get(url)
data = r.json()

# 将字典转化为JSON字符串并输出
data_json = json.dumps(data)
print(data_json)

# 将JSON字符串写入文件
with open('data.json', 'w') as f:
    json.dump(data, f)

出力:

{
    
    "userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}

上記の例では、データをリクエストしtodolist API、それをJSONformat、ターミナルに出力しました。次に、json.dump()辞書データを使用してdata.jsonファイルに書き込み、データの永続化を実現します。

  1. json.loads()

この関数は、JSON 形式の文字列を Python オブジェクトに変換するために使用されます。sパラメータは、解析する必要がある JSON 形式の文字列です。encodingパラメータは、文字列のエンコード方法を設定するために使用されます。パラメータ ( clsobject_hookparse_float、 、parse_intなど)はparse_constantobject_pairs_hook解析中にさまざまなオプションやパラメータを設定するために使用できます。

json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None)

この関数の定義は上に示したとおりですが、この関数の使用方法を示す例を次に示します。

# 定义如下 JSON 格式字符串
json_str = '{"name": "Alice", "age": 25, "isStudent": true}'
# 把这个字符串转成 Python 字典类型
data = json.loads(json_str)
print(type(data))
print(data)

出力:

<class 'dict'>
{
    
    'name': 'Alice', 'age': 25, 'isStudent': True}

この例では、json_strこれは JSON 形式の文字列であり、 を使用して Python 辞書型にjson.loads()解析しますdataこのようにして、JSON データを簡単に処理および操作できます。

JSON データ形式が正しくない場合、または解析できない場合、json.loads()メソッドは。同時に、json.loads()このメソッドを使用する場合は、JSON データが合法であることを確認する必要があります。そうでないと、データ解析の失敗やプログラムのクラッシュなどの問題が発生します。


5 ファイル操作とデータ処理のための共通モジュール - pandas モジュール

Pandas ライブラリは、オープン ソースの使いやすいデータ処理ツールです。Python プログラミング言語の拡張ライブラリです。Python プログラミング言語に高速で柔軟で表現力豊かなデータ構造を提供します。シンプルで強力です。データサイエンスおよびデータ分析ツールであり、一般的に使用されるライブラリの 1 つです。

5.1 pandas が提供するデータ型

  1. シリーズ

Series は、インデックスを持つ numpy 配列に似た1 次元配列オブジェクトです。整数、浮動小数点、文字列、Python オブジェクトなどの任意のデータ型を含めることができます。シリーズはタグ指向であり、タグ を使用して取得できます

コード例 1 :

import pandas as pd
#Series创建方式1:
#由列表或numpy数组创建
s1 = pd.Series(data = np.random.randint(0,10,size=5), index = list('abcde'), name = 'str1')
print(s1)

出力:

a    4
b    2
c    6
d    8
e    7
Name: str1, dtype: int32

コード例 2 :

#方式2:
#由字典创建
s2 = pd.Series({
    
    'A':80,'B':30})
print(s2)
#key:行索引,value:数值

出力:

A    80
B    30
dtype: int64
  1. データフレーム

DataFrame は、軸ラベル (行と列) を持つ 2 次元の表形式のデータ構造です。DataFrame は、同じインデックスを共有し、SQL テーブルと同様の操作を組み込んだ複数のシリーズから構成されるディクショナリとみなすことができます。

コード例:

import pandas as pd

# 创建DataFrame
data = {
    
    
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'gender': ['female', 'male', 'male']
}
df = pd.DataFrame(data)
# 显示前几行数据
print(df.head())
# 筛选特定列
print(df['name'])
# 根据条件筛选行
print(df[df['age'] > 30])
# 添加新列
df['income'] = [5000, 6000, 7000]
print(df)

出力:

      name  age  gender
0    Alice   25  female
1      Bob   30    male
2  Charlie   35    male
0      Alice
1        Bob
2    Charlie
Name: name, dtype: object
      name  age gender
2  Charlie   35   male
      name  age  gender  income
0    Alice   25  female    5000
1      Bob   30    male    6000
2  Charlie   35    male    7000

5.2 pandasが提供する強力なデータ処理機能

Pandas は、強力なデータ前処理、分析、モデリング機能も提供します

  1. CSV、Excel、SQL データベースなど、複数のデータ入出力形式がサポートされています

まず、CSV ファイルを読み取り、操作する方法を示します。

'''
假定我们有一个名为“data.csv”的CSV文件,
其中包含有关城市、日期、天气和温度的数据。
'''
import pandas as pd

# 从CSV文件中读取数据
df = pd.read_csv('data.csv')
# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)
  • pd.read_csv()CSVファイルを読み取る関数です。
  • head()CSVファイルの先頭5行を表示する機能
  • info()データ型や欠損値などの詳細を表示する関数
  • groupby()指定した列ごとにデータをグループ化する機能
  • mean()この関数は各データセットの平均値を計算します。

Pandas を使用して Excel ファイルを読み取り、操作する方法は次のとおりです。

'''
以读取一个名为“data.xlsx”的Excel文件为例,
里面包含“Sheet1”工作表,
其中记录了城市、日期、天气和温度的信息。
'''
import pandas as pd

# 从Excel文件中读取工作表数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)
  • pd.read_excel()Excel ファイルを読み取るための関数であり、ワークシート名またはインデックスを指定する必要があります。
  • その他の部分はCSVファイルの操作と同様です。

SQLデータベースを処理するサンプルコードは次のとおりです。

'''
假设我们有一个MySQL数据库,
其中包含一个名为“weather”的表,
该表记录了城市、日期、天气和温度等信息。
'''
import pandas as pd
import mysql.connector

# 连接到 MySQL 数据库
con = mysql.connector.connect(user='root', password='password123',
                              host='localhost',
                              database='mydatabase')

# 从 MySQL 中选择对应表中的数据
query = "SELECT city, date, weather, temperature FROM weather"
df = pd.read_sql(query, con)

# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)

# 关闭连接
con.close()
  • mysql.connector.connect()MySQL データベースに接続するために使用される関数であり、ユーザー名、パスワード、ホスト アドレス、データベースのデータベース名などのパラメーターを指定する必要があります。
  • pd.read_sql()メソッドは SQL クエリを受け取り、SQL クエリを返しますDataFrame
  • その他の部分はCSVファイルの操作と同様です。
  1. 欠損値や外れ値などの処理を含むデータ クリーニング:

データは Pandas ライブラリを使用して簡単にクリーンアップできます。以下では、Pandas ライブラリを使用して、データ内の欠損値や外れ値に対する一般的な方法に対処する方法を紹介します。
実際には、データに欠損値が存在することがよくあります。これらの欠損値は、人為的ミスが原因である可能性があります。または、何らかの理由で対応するデータを取得できない可能性があります。

コード例:

'''
假设我们有一个DataFrame包含以下三列:
日期、城市和温度,其中部分数据是缺失的:
'''
import numpy as np
import pandas as pd

# 创建 DataFrame,模拟数据中存在缺失值
dates = pd.date_range('2023-01-01', '2023-01-10')
df = pd.DataFrame({
    
    'date': dates,
                   'city': ['Beijing']*5 + ['Shanghai']*5,
                   'temperature': [np.nan, 20, 21, np.nan, 22, np.nan, np.nan, 19, 23, 24]})
print(df)

出力:

        date      city  temperature
0 2023-01-01   Beijing          NaN
1 2023-01-02   Beijing         20.0
2 2023-01-03   Beijing         21.0
3 2023-01-04   Beijing          NaN
4 2023-01-05   Beijing         22.0
5 2023-01-06  Shanghai          NaN
6 2023-01-07  Shanghai          NaN
7 2023-01-08  Shanghai         19.0
8 2023-01-09  Shanghai         23.0
9 2023-01-10  Shanghai         24.0

データには欠損値が多数含まれていることがわかります。Pandas ライブラリを使用してデータ内の欠損値を処理する方法は次のとおりです。

  • まず欠損値をチェックします
# 检查数据是否存在缺失值
print(df.isnull().sum())

出力結果:

date           0
city           0
temperature    4
dtype: int64

この.isnull()関数は、DataFrame 内の欠損値をチェックするために使用され、位置の値が空の場合は戻りTrue、それ以外の場合は戻りますFalseこの関数は.sum()、各列の欠損値の数をカウントするために使用されます。

  • 次に、欠損値を削除します。
# 删除 DataFrame 中含有缺失值的行
df_dropna = df.dropna()
print(df_dropna)

出力:

        date     city  temperature
1 2023-01-02  Beijing         20.0
2 2023-01-03  Beijing         21.0
4 2023-01-05  Beijing         22.0
8 2023-01-09  Shanghai         23.0
9 2023-01-10  Shanghai         24.0

ここでは、関数を使用して.dropna()、DataFrame 内の欠損値を持つ行を削除します。.dropna()デフォルトでは、関数は欠損値がある限り対応する行を削除します。また、列ごとに削除する、少なくとも N 個の非 null 値を保持するなどの削除方法をパラメータを通じて設定することもできます。

  1. さらに、pandas ライブラリには、リサンプリング、集計、マージ、グループ化、充填などを含む強力なデータ変換機能、時系列分析および処理機能、データ視覚化もあり、Matplotlib ライブラリによる描画もサポートしています。

: pandas ライブラリを matplotlib および sklearn と組み合わせて使用​​すると、K-Means クラスタリング アルゴリズムの結果マップが取得されます。
ここに画像の説明を挿入


6 CSV ファイルを処理するための特別なモジュール - csv モジュール

Python で CSV ファイルを操作するのは一般的なタスクです。CSV ファイルには、データがカンマ区切り値 (Comma-Separated Values) 形式で保存されます。上記で紹介したpandasモジュールの他に、csvモジュールも適したモジュールですので、csvモジュールの簡単な使い方を紹介しましょう。

  1. CSVファイルの読み込み

CSV ファイルを読み取るには、Python の組み込みcsvモジュールを使用できます。まず、CSV ファイルを開き、それをcsv.reader()ファイル オブジェクトとして関数に渡す必要があります。

コード例:

import csv

with open('filename.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print(', '.join(row))

上記のコードでは、Python の組み込みを使用してwith open()CSV ファイルを開き、newline=''冗長な空白行が表示されないようにパラメーターを指定します。次に、csv.reader()メソッドを使用して CSV ファイル オブジェクトを渡します。この実行により、アクティビティの反復可能なリスト (リスト) が返されます。ループ ステートメントを使用して各行にアクセスしたり、テキストを 1 行ずつ読み取り (最終行は空)、および などのオプションを使用して行delimited区切りquote characters文字や引用符を制御したりできます。

  1. CSV ファイルに書き込む:

CSV ファイルに書き込むには、csvPython の組み込みモジュールのr クラスを使用できますcsv.writeこのクラスは、writerow()一度に 1 行ずつ記述できるメソッドを提供します。

コード例 1 :

import csv

with open('filename.csv', mode='w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['John Smith', 'Accounting', 'November'])

上記のコードでは、Python の組み込みを使用してwith open()ファイルを開き、パラメーターを指定して関数'Mode'に渡します。csv.writer()次に、CSV ファイルに書き込む必要があるデータをリストとして渡し、writerow()メソッドを使用してデータ行を CSV ファイルに書き込みます。

コード例 2 (辞書として記述) :

import csv

data = [
    {
    
    'Name': 'John', 'Age': 29, 'Country': 'USA'},
    {
    
    'Name': 'Mary', 'Age': 22, 'Country': 'Canada'},
    {
    
    'Name': 'Tom', 'Age': 31, 'Country': 'UK'}
]

with open('people.csv', mode='w', newline='') as file:
    fieldnames = ['Name', 'Age', 'Country']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for person in data:
        writer.writerow(person)

この例では、3 人の人物の詳細を含む辞書のリストを作成しました次に、 という CSV ファイルを開いて作成し"people.csv"DictWriter()関数とfieldnamesパラメーターを使用して CSV ファイルに書き込むフィールドを指定します。最後に、writerow()関数を介して各辞書を CSV ファイルに書き込みます。関数はwriteheader()テーブルヘッダーに自動的に書き込まれます。

: さらに、冒頭で紹介したファイルの読み取りおよび書き込み操作を使用して、追加の書き込み用に「a」を選択することもできます。

おすすめ

転載: blog.csdn.net/z135733/article/details/131136411