目次
[翻訳]Pythonチュートリアル#入力と出力
7.1 より高度な出力フォーマット
7.1.1 Old string formatting
7.2 Reading and Writing Files
7.2.1 Methods of File Objects
7.2.2 Saving structured data with json
ホームページ バックエンド開発 Python チュートリアル [译]Python チュートリアル#入力と出力

[译]Python チュートリアル#入力と出力

Jul 10, 2017 pm 06:13 PM
output python

[翻訳]Pythonチュートリアル#入力と出力

Python でプログラム出力を表示するには、さまざまな方法があります。データは人間が判読できる方法で印刷したり、後で使用するためにファイルに出力したりできます。この章ではこれについて詳しく説明します。

7.1 より高度な出力フォーマット

これまでに、値を出力する 2 つの方法、式ステートメントprint()函数。(第三种方式是使用对象的write()方法;使用sys.stdout標準出力ファイルの参照を紹介しました。詳細については、ライブラリ ファイルのリファレンス マニュアルを参照してください。 )

場合によっては、単にスペースを使用して値を区切るよりも出力をより詳細に制御する必要があります。出力をフォーマットするには 2 つの方法があります。1 つ目は、文字列のスライスと連結操作を使用して文字列を手動で処理し、想像できるあらゆる出力レイアウトを作成する方法です。文字列型は、指定された列幅に文字列をパディングするためのいくつかの便利なメソッドを提供します。これについては後ほど説明します。 2 番目の方法は、フォーマット文字列または str.format() メソッドを使用することです。

string模块包含Template クラス。文字列に値を置換するメソッドを提供します。

もちろんもう 1 つの質問: 値を文字列に変換するにはどうすればよいですか? Python は、値を repr()或者str() 関数に渡すだけで、任意の値を文字列に変換する方法を提供します。

str()函数返回值的人类可读的形式,而repr()生成值的解释器可读形式(如果没有等价语法,将会强制抛出SyntaxError)。对于没有提供特定适应人类阅读形式的对象,str()函数会返回与repr()相同的值。许多值使用str()repr()関数は、数値またはリストや辞書などの構造体と同じ戻り値を取得します。特に、文字列には 2 つの異なる表現があります。

ここにいくつかの例があります:

りー

正方形と立方体のテーブルを出力するには 2 つの方法があります:

りー

(最初の例では、列間のスペースは print() によって自動的に追加されました。関数は出力時に常に引数の間にスペースを挿入します)

この例は、文字列オブジェクトの str.rjust()方法,这个方法使字符串在给定宽度的列中向右对齐,在左边添加空格。str.ljust()str.center()是相似的方法。这些方法并不会改变原来的字符串,只是返回一个新的字符串。如果输入的字符串太长,这些方法并不会截断字符串,而是不改变字符串并返回;虽然这样会使得列布局混乱,但是总比输出不真实的值好。(若实在想截断可以使用切片操作,如:x.ljust(n)[:n] を示します。 )

方法str.zfill() 数値文字列の左側にゼロを追加して、正負の符号を識別します。

りー

str.format() の基本的な使用法は次のとおりです:

りー

渡されたオブジェクト str.format()中的对象会替换掉花括号和其中的字符(称作格式化域)。花括号中的数字可以用来匹配传入str.format() は、中括弧とその中の文字 (書式設定フィールドと呼ばれます) を置き換えます。中括弧内の数字は、

で渡されたオブジェクト リスト内の対応する位置にあるオブジェクトと一致させるために使用できます。
りー

str.format() でキーワード パラメータを使用し、パラメータ名を使用して対応する値を参照できます:

りー

位置引数とキーワード引数を組み合わせることが可能:

りー

!a(对应ascii()),!s(对应str())以及!r(对应repr())、書式設定する前に値を変換するために使用されます:

りー

書式設定フィールドの後には、オプションで 3 桁の精度を指定できます::以及格式化命令,允许对值的格式化进一步控制。以下示例指定PI

りー
フォーマット済みフィールドの最小幅を指定するには、

の後に整数を使用します。これはテーブルを作成するときに便利です: :

りー
長い文字列があり、それを分割したくない場合は、位置ではなく名前で変数を参照できます。辞書を渡し、角括弧を使用してキーにアクセスするだけです:

りー

を使用して辞書をキーワード引数に解凍することもできます: **

りー

built-in函数vars()返回将当前局部变量作为字典返回,结合vars()使用时,以上特别有用。

参考Format String Syntax,完全了解str.format()

7.1.1 Old string formatting

可以使用%操作符格式化字符串。这种方式像sprintf()风格一样解析%左边的格式化参数,并将右边的参数应用到左边,然后返回格式化后的字符串。示例:

<code class="sourceCode python"><span class="op">>>></span> <span class="im">import</span> math
<span class="op">>>></span> <span class="bu">print</span>(<span class="st">'The value of PI is approximately </span><span class="sc">%5.3f</span><span class="st">.'</span> <span class="op">%</span> math.pi)
The value of PI <span class="op">is</span> approximately <span class="fl">3.142</span>.</code>
ログイン後にコピー

更多信息参见printf-style String Formatting 章节。

7.2 Reading and Writing Files

open()函数返回文件对象(file object),通常使用两个参数调用:open(filename, mode)

<code class="sourceCode python"><span class="op">>>></span> f <span class="op">=</span> <span class="bu">open</span>(<span class="st">'workfile'</span>, <span class="st">'w'</span>)</code>
ログイン後にコピー

第一个参数是文件的字符串路径。第二个参数是包含几个字符的字符串,描述文件的使用方式。模式r用于读;w只用于写(存在的同名文件将会被删除);a打开文件追加内容,所有写到文件中的内容都会自动添加到文件末尾;r+打开文件可读可写。模式参数是可选的,r是默认模式参数。

通常,文件以文本模式打开,意味着可以从文件中读写字符串,字符串以特定的格式编码。如果没有指定字符编码,那默认值是平台相关的编码(参见open())。追加到模式参数的b指定文件以二进制模式打开:数据以字节对象的形式读写。这种模式用于不包含文本的文件。

文本模式中,读文件时默认将平台特定的行尾结束符(Unix中的\n,Windows中的\r\n)转换为\n。以文本模式写文件时,默认将所有出现的\n转换为平台特定的行尾结束符。这种暗地修改文件数据对于文本文件没有影响,但是会损坏JPEG或者EXE之类的文件的数据。使用二进制模式读写这类文件是要谨慎。

处理文件对象时使用with是比较好的实践。好处是当操作完成后文件可以恰当关闭,即使有异常发生。使用with比使用与其等价的try-finally语句块也简洁得多:

<code class="sourceCode python"><span class="op">>>></span> <span class="cf">with</span> <span class="bu">open</span>(<span class="st">'workfile'</span>) <span class="im">as</span> f:
...     read_data <span class="op">=</span> f.read()
<span class="op">>>></span> f.closed
<span class="va">True</span></code>
ログイン後にコピー

如果没有使用with关键字,必须手动调用f.close()方法关闭文件,立即释放占用的系统资源。如果没有明确关闭文件,Python的垃圾收集程序最终会销毁对象并关闭文件,但是这之前文件会保持打开状态一段时间。另一个风险是不同的Python解释器实现会在不同的时刻做回收操作。

文件对象关闭后,无论通过with语句还是使用f.close()试图使用文件对象都会失败:

<code class="sourceCode python"><span class="op">>>></span> f.close()
<span class="op">>>></span> f.read()
Traceback (most recent call last):
  File <span class="st">"<stdin>"</span>, line <span class="dv">1</span>, <span class="op">in</span> <span class="op"><</span>module<span class="op">></span>
<span class="pp">ValueError</span>: I<span class="op">/</span>O operation on closed <span class="bu">file</span></code>
ログイン後にコピー

7.2.1 Methods of File Objects

这个章节以下的示例中,假设已经创建了一个叫做f的文件对象。

使用f.read(size)读取文件内容,该方法读取指定数量数据并作为字符串(文本模式)或者字节对象(二进制模式)返回。size是可选的数字参数。size省略或者为负数时,会读取整个文件内容并且返回,如果文件大小比机器内存要大时,全部读取会产生问题。若指定size,至多size大小的字节被读取并返回。如果读到了文件末尾,f.read()返回空字符串('')。

<code class="sourceCode python"><span class="op">>>></span> f.read()
<span class="co">'This is the entire file.\n'</span>
<span class="op">>>></span> f.read()
<span class="co">''</span></code>
ログイン後にコピー

f.readline()从文件中读取单行,读取到的字符串末尾会自动加上换行符(\n),只有当文件不以换行符结尾时,读取到文件的最后一行才不会自动加'\n'。这样使得返回值不会含糊不清,如果f.readline()返回空字符串时,那么就读到了文件末尾,而空行则返回\n表示,这是一个只包含单个换行符的字符串。

<code class="sourceCode python"><span class="op">>>></span> f.readline()
<span class="co">'This is the first line of the file.\n'</span>
<span class="op">>>></span> f.readline()
<span class="co">'Second line of the file\n'</span>
<span class="op">>>></span> f.readline()
<span class="co">''</span></code>
ログイン後にコピー

使用迭代文件对象的方式,从文件中读取行。这种方式内存高效,快速,代码简洁:

<code class="sourceCode python"><span class="op">>>></span> <span class="cf">for</span> line <span class="op">in</span> f:
...     <span class="bu">print</span>(line, end<span class="op">=</span><span class="st">''</span>)
...
This <span class="op">is</span> the first line of the <span class="bu">file</span>.
Second line of the <span class="bu">file</span></code>
ログイン後にコピー

如果需要读取文件所有行到列表中,可以使用list(f)或者f.readlines()

f.write(string)将内容string写入文件,返回写入的字符串数。

<code class="sourceCode python"><span class="op">>>></span> f.write(<span class="st">'This is a test</span><span class="ch">\n</span><span class="st">'</span>)
<span class="dv">15</span></code>
ログイン後にコピー

其他类型的对象在写入之前对象需要转换,要么转换为字符串(文本模式),要么转换为字节对象(二进制模式):

<code class="sourceCode python"><span class="op">>>></span> value <span class="op">=</span> (<span class="st">'the answer'</span>, <span class="dv">42</span>)
<span class="op">>>></span> s <span class="op">=</span> <span class="bu">str</span>(value)  <span class="co"># convert the tuple to string</span>
<span class="op">>>></span> f.write(s)
<span class="dv">18</span></code>
ログイン後にコピー

在二进制模式中,f.tell()方法返回一个数字,该数字指示文件对象在文件中的当前位置,是相对于文件开始的字节数目。在文本模式中,该方法返回一个模糊的数字。

使用f.seek(offset, from_what)改变文件对象的位置。offset(偏移量)加上from_what参数指定的参考点计算出要移动到的位置。from_what值为0时表示文件开头为参考点,1表示当前文件位置为参考点,2表示文件末尾为参考点。from_what可以省略,默认为0,指示文件开头为参考点。

<code class="sourceCode python"><span class="op">>>></span> f <span class="op">=</span> <span class="bu">open</span>(<span class="st">'workfile'</span>, <span class="st">'rb+'</span>)
<span class="op">>>></span> f.write(b<span class="st">'0123456789abcdef'</span>)
<span class="dv">16</span>
<span class="op">>>></span> f.seek(<span class="dv">5</span>)      <span class="co"># Go to the 6th byte in the file</span>
<span class="dv">5</span>
<span class="op">>>></span> f.read(<span class="dv">1</span>)
b<span class="st">'5'</span>
<span class="op">>>></span> f.seek(<span class="op">-</span><span class="dv">3</span>, <span class="dv">2</span>)  <span class="co"># Go to the 3rd byte before the end</span>
<span class="dv">13</span>
<span class="op">>>></span> f.read(<span class="dv">1</span>)
b<span class="st">'d'</span></code>
ログイン後にコピー

文本文件中(没有使用b,以文本模式打开),只允许使用相对于文件开头的seek()方法(使用seek(0, 2)寻找文件末尾例外),并且有效的offset值(偏移量)只能是f.tell()的返回值或者0。任何其他的offset值(偏移量)都会发生未定义的行为。

文件对象有一些额外的方法,比如很少使用的isatty()truncate()。查阅库文件手册获取关于文件对象的完整信息。

7.2.2 Saving structured data with json

字符串可以很容易从文件中读取或写入到文件中。由于read()方法只返回字符串,数字需要额外转换,使用如int()的函数,输入字符串'123'返回数字值123。当希望保存更为复杂的数据类型,像嵌套列表或者字典之类的,手动解析和序列化就变得复杂了。

不需要用户不断编写和调试保存复杂数据类型到文件的代码,Python提供了流行的数据交换格式JSON(JavaScript Object Notation)。标准模块json可以接收Python数据结构,并把它们转换为字符串表示形式,这个过程称为序列化。从字符串形式重新构造数据称为反序列化。在序列化合反序列换之间,字符串形式表示的对象可以存储到文件或者数据中,或者通过网络连接发送到远程目标机器。

注解:JSON格式普遍用于现代应用程序中,用于数据交换。许多程序员已经熟悉了,是一种不错的协作选择

可以使用以下代码查看对象x的JSON字符串表示形式:

<code class="sourceCode python"><span class="op">>>></span> <span class="im">import</span> json
<span class="op">>>></span> json.dumps([<span class="dv">1</span>, <span class="st">'simple'</span>, <span class="st">'list'</span>])
<span class="co">'[1, "simple", "list"]'</span></code>
ログイン後にコピー

另一种dumps()方法的变种,dump(),该方法简单将对象序列化到文本文件。如果f是已经以写模式打开的文本文件对象,可以使用如下代码:

<code class="sourceCode python">json.dump(x, f)</code>
ログイン後にコピー

可以再次解码对象,如果f是以读模式打开的文本文件对象:

<code class="sourceCode python">x <span class="op">=</span> json.load(f)</code>
ログイン後にコピー

以上是可以处理列表和字典的简单序列化技术,但是要处理任意类实例需要额外的操作。json模块的参考内容包含以下解释:

参见:pickle - pickle模块

与JSON不同,pickle是一种协议,允许任意复杂Python对象序列化。就这一点论,它只能用于 Python, 而不能用于与其他语言编写的应用程序通信。默认情况下它是不安全的:如果数据由熟练的攻击者精心制作, 反序列化来自一个不受信任源的 pickle 数据可以执行任意代码。

以上が[译]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)

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

hadidb:pythonの軽量で水平方向にスケーラブルなデータベース hadidb:pythonの軽量で水平方向にスケーラブルなデータベース Apr 08, 2025 pm 06:12 PM

hadidb:軽量で高レベルのスケーラブルなPythonデータベースHadIDB(HadIDB)は、Pythonで記述された軽量データベースで、スケーラビリティが高くなっています。 PIPインストールを使用してHADIDBをインストールする:PIPINSTALLHADIDBユーザー管理CREATEユーザー:CREATEUSER()メソッド新しいユーザーを作成します。 Authentication()メソッドは、ユーザーのIDを認証します。 fromhadidb.operationimportuseruser_obj = user( "admin"、 "admin")user_obj。

MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

mysqlはインターネットが必要ですか? mysqlはインターネットが必要ですか? Apr 08, 2025 pm 02:18 PM

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? 高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? Apr 08, 2025 pm 06:03 PM

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQLワークベンチはMariadBに接続できますか MySQLワークベンチはMariadBに接続できますか Apr 08, 2025 pm 02:33 PM

MySQLワークベンチは、構成が正しい場合、MariadBに接続できます。最初にコネクタタイプとして「mariadb」を選択します。接続構成では、ホスト、ポート、ユーザー、パスワード、およびデータベースを正しく設定します。接続をテストするときは、ユーザー名とパスワードが正しいかどうか、ポート番号が正しいかどうか、ファイアウォールが接続を許可するかどうか、データベースが存在するかどうか、MariadBサービスが開始されていることを確認してください。高度な使用法では、接続プーリングテクノロジーを使用してパフォーマンスを最適化します。一般的なエラーには、不十分な権限、ネットワーク接続の問題などが含まれます。エラーをデバッグするときは、エラー情報を慎重に分析し、デバッグツールを使用します。ネットワーク構成を最適化すると、パフォーマンスが向上する可能性があります

MySQLを解く方法は、ローカルホストに接続できません MySQLを解く方法は、ローカルホストに接続できません Apr 08, 2025 pm 02:24 PM

MySQL接続は、次の理由が原因である可能性があります。MySQLサービスは開始されず、ファイアウォールは接続をインターセプトし、ポート番号が間違っています。ユーザー名またはパスワードが間違っています。My.cnfのリスニングアドレスは不適切に構成されています。トラブルシューティング手順には以下が含まれます。 2.ファイアウォール設定を調整して、MySQLがポート3306をリッスンできるようにします。 3.ポート番号が実際のポート番号と一致していることを確認します。 4.ユーザー名とパスワードが正しいかどうかを確認します。 5. my.cnfのバインドアドレス設定が正しいことを確認してください。

MySQLにはサーバーが必要ですか MySQLにはサーバーが必要ですか Apr 08, 2025 pm 02:12 PM

生産環境の場合、パフォーマンス、信頼性、セキュリティ、スケーラビリティなどの理由により、通常、MySQLを実行するためにサーバーが必要です。サーバーには通常、より強力なハードウェア、冗長構成、より厳しいセキュリティ対策があります。小規模で低負荷のアプリケーションの場合、MySQLはローカルマシンで実行できますが、リソースの消費、セキュリティリスク、メンテナンスコストを慎重に考慮する必要があります。信頼性とセキュリティを高めるには、MySQLをクラウドまたは他のサーバーに展開する必要があります。適切なサーバー構成を選択するには、アプリケーションの負荷とデータボリュームに基づいて評価が必要です。

See all articles