ファイル処理

# ファイルに2行分の文字列を書き込む

f = open('hello.txt', 'w')      # オープン(テキスト+書込みモード)

f.write('Hello!\n')
f.write('How are you?\n')

f.close()                       # クローズ

C:>python xxx.py

# ファイルに2行分の文字列を書き込む(writelinesメソッド)

f = open('hello.txt', 'w')      # オープン(テキスト+書込みモード)

f.writelines(['Hello!\n', 'How are you?\n'])

f.close()                       # クローズ

C:>python xxx.py

# ファイルに2行分の文字列を書き込む(writelinesメソッド)

f = open('hello.txt', 'w')      # オープン(テキスト+書込みモード)

print('Hello!\nHow are you?', file=f)   # 末尾に改行文字が自動的に出力される

f.close()                       # クローズ

C:>python xxx.py

# ファイルから2行分の文字列を読み込んで表示

f = open('hello.txt')       # オープン(テキスト+読込みモード)

line1 = f.readline()        # 1行分読み込む
line2 = f.readline()        # 1行分読み込む

print(line1, end='')
print(line2, end='')

f.close()                   # クローズ

C:>python xxx.py
Hello!
How are you?

# ファイルに2行分の文字列を追加する

f = open('hello.txt', 'a')  # オープン(テキスト+追記モード)

f.write('Fine, thanks.\n')
f.write('And you?\n')

f.close()                   # クローズ

C:>python xxx.py

# ファイルからすべての行の文字列を読み込んで表示

f = open('hello.txt')       # オープン(テキスト+読込みモード)

while True:
    line = f.readline()
    if not line:            # 読み込めなかった(末尾に達した)
        break
    print(line, end='')

f.close()                   # クローズ

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# ファイルからすべての行の文字列を読み込んで表示(readメソッド)

f = open('hello.txt')       # オープン(テキスト+読込みモード)

lines = f.read()
print(lines, end='')

f.close()                   # クローズ

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# ファイルからすべての行の文字列を読み込んで表示(readlinesメソッド)

f = open('hello.txt')       # オープン(テキスト+読込みモード)

lines = f.readlines()
for line in lines:
    print(line, end='')

f.close()                   # クローズ

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# ファイルからすべての行の文字列を読み込んで表示(走査の対象はファイルオブジェクト)

f = open('hello.txt')       # オープン(テキスト+読込みモード)

for line in f:
    print(line, end='')

f.close()                   # クローズ

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# ファイルから文字列を読み込んで表示(例外処理)

try:
    f = open('hello.txt', 'r')
    try:
        for line in f:
            print(line, end='')
    except OSError:
        pass             # 読込み失敗時の対処
    finally:
        f.close()
except OSError:
    pass                 # オープン失敗時の対処

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# ファイルから文字列を読み込んで表示(with文)

with open('hello.txt', 'r') as f:
    for line in f:
        print(line, end='')

C:>python xxx.py
Hello!
How are you?
Fine, thanks.
And you?

# バイナリファイルに0x00~0xffを書き込む

with open('binfile.bin', 'bw') as f:     # バイナリの書込みモード
    f.write(bytes(range(0, 256)))

C:>python xxx.py

# バイナリファイルから読み込む

with open('binfile.bin', 'br') as f:
    bin = f.read()                      # すべてを読み込む
    for c in bin:
        print(int(c))

C:>python xxx.py
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

# バイナリファイルの任意の位置の文字を読み込む

with open('binfile.bin', 'br') as f:
    while True:
        pos = int(input('位置:'))
        f.seek(pos)
        c = f.read(1)
        print(c[0])

        retry = input('もう一度[Y/N]:')
        if retry in {'N', 'n'}:
            break

C:>python xxx.py
位置:5
5
もう一度[Y/N]:n

# ファイルをダンプ(ファイルの中身をコードと文字とで表示)

import string

def is_print(ch: str) -> bool:
    """文字chは印字可能文字であるか?"""
    return (ch == ' ' or ch in string.digits or ch in string.ascii_letters
                      or ch in string.punctuation)

fname = input('ファイル名:')

with open(fname, 'rb') as f:
    count = 0    # アドレス(先頭から何バイト目か)
    while True:
        buf = f.read(16)
        n = len(buf)
        if n == 0:
            break
        print(f'{count:08x}', end=' ')         # アドレス
        for i in range(n):                     # 文字コード
            print(f'{buf[i]:02x}', end=' ')
        if n < 16:
            print('   ' * (16 - n), end='')
        for i in buf:                          # 文字
            ch = chr(i)
            print(f'{ch if is_print(ch) else "."}', end='')
        print()
        if n < 16:
            break
        count += 16

C:>python xxx.py
ファイル名:hello
Traceback (most recent call last):
File “C:\xxx.py”, line 12, in
with open(fname, ‘rb’) as f:
~~~~^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ‘hello’

# 前回実行時の日付と時刻を表示

import os.path
import pickle
import datetime

CONFIG_FILE = 'config.dat'

previous = None

if os.path.exists(CONFIG_FILE):
    with open(CONFIG_FILE, 'rb') as f:
        previous = pickle.load(f)
        print(f'前回:{previous}')
        pass
else:
    print('本プログラムを実行するのは初めてですね。')

# いろいろな処理

current = datetime.datetime.now()

with open(CONFIG_FILE, 'wb') as f:
    pickle.dump(current, f)

C:>python xxx.py
本プログラムを実行するのは初めてですね。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。