[ゼロから1へのPython] 3。文法ベースのファイル操作、CSVファイルの読み取りと書き込み、およびオブジェクト指向

「ゼロから1へのPython」へようこそ。ここでは、約200のPythonシリーズの記事を共有し、みんなで学び、一緒に遊んで、Pythonの興味深い世界を見ていきます。すべての記事は、ケース、コード、作者の経験と組み合わせて説明されます。10年近くのプログラミング経験を皆さんと共有したいと思います。お役に立てば幸いです。記事の不備についてはHaihanもお願いします。

Pythonシリーズの全体的なフレームワークには、10の基本文法、30のWebクローラー、10の視覚分析、20の機械学習、20のビッグデータ分析、30の画像認識、40の人工知能、20のPythonセキュリティ、および10のその他のスキルが含まれます。 。あなたの注意、いいね、再投稿はXiuzhangに対するあなたの最大のサポートです。知識は貴重であり、人々は愛情深いです。私たち全員が幸せになり、人生の道で一緒に成長できることを願っています。

この記事は著者のCSDN記事を参照しており、リンクは次のとおりです。

同時に、著者が新しくオープンした「Nazhang AI Security Home」は、Pythonとセキュリティ技術に焦点を当て、主にWebの浸透、システムセキュリティ、人工知能、ビッグデータ分析、画像認識、悪意のあるコードの検出、CVEの再現、脅威の知能を共有します。分析およびその他の記事。著者は技術初心者ですが、すべての記事が細心の注意を払って書かれるようにします。これらの基本的な記事があなたの助けになり、Pythonと安全への道を歩むすべての人と進歩することを願っています。



1.ファイル操作

ファイルとは、外部メディアに保存されているデータの集まりを指します。テキストファイルのエンコード方法には、ASCII形式、Unicodeコード、UTF-8コード、GBKコードなどがあります。ファイルの操作フローは、「ファイルを開く-ファイルを読み書きする-ファイルを閉じる」の3部作です。

1.ファイルを開きます

ファイルを開くには、open()関数を呼び出すと、返される結果はファイルオブジェクトになります。関数のプロトタイプは次のとおりです。

<variable> = open(<name>, <mode>)
    -<name>表示打开文件名称
    -<mode>表示文件打开模式

モードの一般的なパラメータは次のとおりです。

  • r:読み取り専用。ファイルポインタはファイルの先頭に配置されます
  • w:書き込みのみ。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。
  • a:追加するファイルを開きます。ファイルがすでに存在する場合は、ファイルポインタがファイルの最後に配置されます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
  • rb:読み取り専用のバイナリファイル。通常、画像などの非テキストファイルに使用されます。
  • wb:バイナリファイルのみを書き込みます。通常、画像などの非テキストファイルに使用されます。
  • ab:追加するためにバイナリ形式でファイルを開きます
  • w +:読み取りと書き込み用にファイルを開く

open()関数の完全な構文は次のとおりです。

  • open(file、mode = 'r'、buffering = -1、encoding = None、errors = None、newline = None、closefd = True、opener = None)

ここに写真の説明を挿入

簡単な例を挙げてください。

infile = open("test.txt","r")

注:open()メソッドを使用して、ファイルオブジェクトが閉じていることを確認します。つまり、close()メソッドを呼び出します。


2.ファイルの読み取りと書き込み

(1)
ファイルの読み取り一般的に使用されるファイルの読み取り方法は次のとおりです。

  • read()の戻り値は、テキストコンテンツ全体を含む文字列です。
  • readline()は、ファイルコンテンツの次の行のコンテンツを含む文字列を返します
  • readlines()の戻り値は、ファイルコンテンツ全体のリストであり、リスト内の各項目は文字列の行です。

例は次のとおりです。

infile = open("test.txt","r",encoding="utf8")
data = infile.read()
print(data)
print("")

infile = open("test.txt","r",encoding="utf8")
list_data = infile.readlines()
print(list_data)

出力結果を以下に示します。

ここに写真の説明を挿入
ここに写真の説明を挿入


(2)ファイルの
書き込みコンピューターのメモリからファイルにデータを書き込むには、次の方法があります。

  • write()テキストデータまたはバイナリデータセットを含む文字列をファイルに書き込みます
  • writelines()は、リスト操作の文字列リストパラメータを受け入れ、それをファイルに書き込みます
outfile1 = open('test.txt','a+',encoding="utf8")
str1 = '\nhello\n'  
str2 = 'world\n'
outfile1.write(str1)  
outfile1.write(str2)
outfile1.close()
  
outfile2 = open('test02.txt','w',encoding="utf8")
outfile2.writelines(['hello',' ','world'])  
outfile2.close()

infile = open('test.txt','r',encoding="utf8")
data = infile.read()
print(data)

test.txtファイルの追加の書き込み操作を完了し、test02.txtファイルの新規および書き込み操作を完了し、write()メソッドとwritelines()メソッドを呼び出してデータを同時に書き込みます。

ここに写真の説明を挿入

ここに写真の説明を挿入


3.ファイルを閉じます

ファイルの読み取りと書き込みが完了したら、close()メソッドを使用してファイルを閉じることを忘れないでください。closeステートメントの使用を忘れた場合、プログラムが突然クラッシュすると、プログラムがファイルの書き込み操作を正常に完了した後でも、ファイルが閉じられていないため、ファイルに書き込みが含まれていない可能性があるため、プログラムは書き込み操作を実行しません。データ。安全のため、使用後にファイルを閉じる必要があります。読者は、try-except-finally例外キャプチャステートメントを使用して、finally句でファイルを閉じることをお勧めします。

try:
	#文件操作
except :
    #异常处理
finally:
	file.close()

その他の方法は次のとおりです。

  • file.flush():ファイルの内部バッファーをフラッシュします
  • file.next():ファイルの次の行を返します
  • file.seek(offset [、whence]):ファイルの現在の位置を設定します
  • file.tell():ファイルの現在の位置を返します
  • file.truncate([size]):ファイルをインターセプトします。インターセプトされたバイトはサイズで指定されます

4.ファイルをループします

データクロールやデータ分析では、ファイルトラバーサルが頻繁に発生します。forループは通常、ファイルコンテンツをトラバースするために使用されます。一方では、read()関数を呼び出してファイルループ出力を読み取ることができ、他方では、readlines()関数を呼び出すこともできます。2つの方法の比較コードは次のとおりです。

infile = open('test02.txt', 'r', encoding="utf8")
for line in infile.readlines():
   print(line)
print(infile.close())

infile = open('test02.txt', 'r', encoding="utf8").read()
for line in infile:
   print(line)
print(infile.close())

TXTファイルと出力値を含む出力結果「JingYeSi」を下図に示します。

ここに写真の説明を挿入



2.CSVファイル操作

Webクロールやデータ分析にPythonを使用すると、通常、Excelテーブルに似たCSVファイルが発生します。次に、SCVファイルの読み取りと書き込みの基本的な知識を追加します。

CSV(Comma-Separated Values)は、一般的に使用されるストレージファイルであり、コンマ区切り文字と値の間にセミコロンがあります。ファイルの書き込みやファイルの読み取りなど、使用するCSV拡張パッケージをPythonにインポートします。

1.CSVファイルの書き込み

基本的なプロセスは次のとおりです。

  • CSVモジュールのインポート
  • CSVファイルオブジェクトを作成する
  • CSVファイルに書き込む
  • ファイルを閉じる
# -*- coding: utf-8 -*-
import csv
c = open("test-01.csv", "w", encoding="utf8")  #写文件
writer = csv.writer(c)
writer.writerow(['序号','姓名','年龄'])
 
tlist = []
tlist.append("1")
tlist.append("小明")
tlist.append("10")
writer.writerow(tlist)
print(tlist,type(tlist))
 
del tlist[:]  #清空
tlist.append("2")
tlist.append("小红")
tlist.append("9")
writer.writerow(tlist)
print(tlist,type(tlist))
 
c.close()

出力結果を以下に示します。

ここに写真の説明を挿入

この時点で余分な空白行があることに注意してください。簡単な処理を実行し、解決するパラメータ「newline = ''」を追加する必要があります。

  • c = open(“ test-01.csv”、“ w”、encoding =“ utf8”、newline = '')

ここに写真の説明を挿入


2.CSVファイルの読み取り

基本的なプロセスは次のとおりです。

  • CSVモジュールのインポート
  • CSVファイルオブジェクトを作成する
  • CSVファイルを読む
  • ファイルを閉じる
# -*- coding: utf-8 -*-
import csv
c = open("test-01.csv", "r", encoding="utf8")  #读文件
reader = csv.reader(c)
for line in reader:
    print(line[0],line[1],line[2])
c.close()

出力結果を以下に示します。

ここに写真の説明を挿入

特にPython2では、ファイル操作でのエンコードの問題が最も厄介です。ただし、環境コードとの整合性があれば十分であり、関連する変換にも注意を払うことで効果的に解決でき、エンコーディングを明確に書き込むことで、Python3ファイルの読み取りおよび書き込み操作を正常に表示できます。データベース、Webページ、およびバックエンド言語の場合、utf8やgbkなどの3つのコーディング方法は一貫している必要があり、特定の問題を詳細に解決する必要があります。フォローアップの作成者は、クローラーと組み合わせたCSVファイルの操作について説明します。

ここに写真の説明を挿入



3.オブジェクト指向の基盤

従来のプログラミング手法はプロセス指向であり、ビジネスロジックに従って上から下に実行されます。オブジェクト指向プログラミングは別のプログラミング手法です。このプログラミング手法は「クラス」と「オブジェクト」を使用して実装する必要があり、関数はカプセル化されます。実生活に近いプログラミング方法。

オブジェクト指向は、客観的なものを属性と動作と見なし、同じクラスのオブジェクトの共通のプロパティと動作を抽象化してクラスを形成し、クラスの継承と多態性によってコードの再利用を実現するオブジェクトです。オブジェクトはクラスのインスタンスです。オブジェクトを家と比較すると、クラスは家の設計図であり、プロパティとメソッドはクラスで定義されます。

オブジェクト指向の3つの基本的な特徴は次のとおりです。

  • カプセル化:客観的なものを抽象クラスにカプセル化します。クラス内のデータとメソッドにより、クラスまたはオブジェクトの操作が可能になります。
  • 継承:サブクラスが親クラスを継承した後、元のクラスを書き換えることなく親クラスのすべての関数を使用でき、関数を拡張できます。
  • 多態性:クラスで定義された属性または動作は、特別なクラスに継承された後、異なるデータタイプを持つか、異なる動作を示す可能性があります。各クラスは異なるセマンティクスを示す可能性があります。実装の2つの方法は、オーバーライドとオーバーロードです。

Pythonでは、クラスはテンプレートです。テンプレートには、いくつかの関数を実装する複数の関数を含めることができます。オブジェクトはテンプレートに基づいて作成されたインスタンスであり、クラス内の関数はインスタンスオブジェクトを介して実行できます。次のように:

#创建类
class 类名:
	#创建类中的函数,self特殊参数,不能省略
	def 函数名(self):
		#函数实现
		
#根据类创建对象obj
obj = 类名()

長方形の面積と周囲を計算するプログラムを作成する必要があるとします。2つの変数の長さと幅を定義し、クラス内の面積と周囲を計算する方法を定義して、例として使用します。コードは次のように表示されます。

#-*- coding:utf-8 -*-
class Rect:
    def __init__(self, length, width):
        self.length = length;
        self.width = width;

    def detail(self):
        print(self.length, self.width)

    def showArea(self):
        area = self.length * self.width
        return area

    def showCir(self):
        cir = (self.length + self.width) * 2
        return cir
#实例化
rect1 = Rect(4,5)
#调用函数
rect1.detail()
area = rect1.showArea()
cir = rect1.showCir()
print('面积:', area)
print('周长:', cir)

出力領域は20で、周囲は18です。オブジェクト指向のカプセル化の場合、実際には、構築メソッドを使用してコンテンツをオブジェクトにカプセル化し、カプセル化されたコンテンツをオブジェクトを介して直接または間接的に取得します。

ここに写真の説明を挿入

全体として、オブジェクト指向とは、物事そのものの観点から問題を考えて解決することです。上記をプロセス指向の定義関数の形で実装する場合、複数の形状がある場合は、形状ごとにメソッドを定義する必要があります。オブジェクト指向は、これらの形状の属性とメソッドを抽象化して、実際の状況により一致するさまざまな形状を形成する必要があるだけです。

注:読者がPythonデータのクロール、データ分析、画像認識、その他の知識をより簡潔かつ迅速に学習できるようにするために、このシリーズのコードは、クラスやオブジェクトを定義する方法で提示されることはめったにありませんが、実装する必要のある関数やケースに直接基づいています。対応するコードまたは関数の実装を直接記述します。これは不規則で不合理です。実際の開発またはより標準化されたコードでは、オブジェクト指向の方法を使用してプログラミングすることをお勧めしますが、このシリーズでは、最も簡潔なコードを通じて原理を示したいので、改善してあなたのスキルを練習します。


オブジェクト指向のデザインパターンの
別の例:子供たちのプログラミングの学習を容易にするために、X社はレーシングカーシミュレーターを開発しました。このシミュレーターを使用すると、各子供たちは簡単な言語を使用して次のような車を制御できます。右、左など 簡単な言語を設計し、その言語の文法とクラス図を示してください。

これは、実際のプログラミングでの生活に関連する問題です。設計パターンの知識が必要です。私が使用する方法は、「ネーミングモード」によって実装されます。クライアントは子供と車を定義し、リクエスターは子供から送信される右と左です。 、Up、Downコマンド、レシーバーはCarがMove()を実行し、abstractコマンドはup、down、left、rightの抽象インターフェースであり、特定のコマンドはCarのup、down、left、rightです。私が作成したクラス図は次のとおりです

ここに写真の説明を挿入
。この例では、プロセス指向の機能を正式に実現するのではなく、オブジェクト指向の思考、思考、および問題の解決を、物事自体の観点から使用しました。別の空中陸車がある場合は、上下左右に移動できるだけでなく、飛行も可能です。従来の方法では、さらに4つの移動方法を記述する必要があり、オブジェクト指向はCarを直接継承し、新しい飛行方法を追加します。 (方向性なしで)、これはオブジェクト指向の利点です。

同様に、この例では、コマンドモードと描画されたクラス図のどちらが正しいかを証明しようとはしていません。説明したいのは、学習オブジェクト指向の知識は主に実生活の問題を解決するために使用され、問題をより効率的に解決できるということです。そして最適化されたコード。同時に、オブジェクト指向の考え方は、要件の変化に適応し、ユーザーの実際のニーズを解決する必要があります。抽象化、カプセル化の変更(強調)、デザインパターン、その他の知識を含む変更は、デザインで可能な限り考慮する必要があります。



4.まとめ

いずれにせよ、著者はこの記事があなたにPythonのある程度の知識を与え、あなたが私に従ってコードを書き、一緒に進歩することができることを願っています。記事がいくつかの些細なアイデアを提供し、あなたの研究やプロジェクトに役立つことができれば、それはさらに満足のいくものになるでしょう。著者の最大の期待は、記事のストーリー、単語、コード、またはケースのいくつかがあなたと一生懸命働く人々に役立つことです。

前の記事への感謝:

最後に、「Nazhang House」パブリックアカウントにご注目いただき、誠にありがとうございます。長年の会社のCSDNに感謝し、常に共有を主張し、私の記事があなたの成長に伴うことを願っており、テクノロジーの道を前進し続けることを望んでいます。記事があなたにとって有益で感傷的なものであるなら、それは私に戻るのに最適です、それを読んでそれを大切にしてください!2020年8月18日に開設された公式アカウント、よろしくお願いします。「なざんハウス」の宣伝にご協力ください、はは〜新人、アドバイスをお願いします。

ここに写真の説明を挿入

残念ながら、完璧になる方法を教えてください。
亡くなりました、前進し続けましょう。
夜の彼女の姿はとても美しいです。

(投稿者:Nazhang House Eastmount 2020-09-22、ウーハンでの夜https://blog.csdn.net/Eastmount


参照は次のとおりです。

おすすめ

転載: blog.csdn.net/Eastmount/article/details/108737755