---
# System prepended metadata

title: 檔案 Files

---

# 檔案 Files
在python讀寫檔案，可以用 `open(檔案路經, 模式)`
其中 `'r'`代表 read，`w`代表 write。
```python=
# 開啟檔案
file = open('some_file.txt', 'r')
# 關閉檔案
file.close()
```
檔案可以用的方法有：
`close()`
`read()`
`write()`
`readline()`
`readlines()`
`writelines()`
`tell()`
`seek()`

## read()
未指定參數讀全部，否則讀特定字元數。
```python=
file = open('some_file.txt', 'r')
# 改成 content = file.read(2) 就會只讀兩個字元
content = file.read()
print(content)
file.close()
```

## write()
```python=
# 如果此檔案不存在，則新建一個檔案 
file = open('some_file.txt', 'w')
file.write('Hello world!')
file.close()
```

## with()
每次開檔案要記得關閉檔案(`close()`)。
我們可以用 `with` 來自動關檔案。
```python=
with open('some_file.txt', 'r') as file:
    print(file.read())
```
當 `with` 區塊結束時，檔案也會關閉。

若要開啟多個檔案：
```python=
with open('a.txt', 'r') as a, open('b.txt', 'w') as b:
    pass
```

## readline()
還記得我們在 `print()` 的時候，如果用 `'\n'`代表換行。
在 Windows 中，換行是 `'\r\n'`。
`readline()`讀取到 `'\n'`或`'\r\n'`時，會判斷成一行。
```python=
file = open('some_file.txt', 'r')
firstLine = file.readline()
print(firstLine)
file.close()
```
在使用`read`或`readline`時，「游標」都會往下，舉例來說：
```python=
file = open('some_file.txt', 'r')
print(file.readline()) # 顯示第一行
print(file.readline()) # 顯示第二行
print(file.readline()) # 顯示第三行
print(file.read()) # 顯示第四行~全部
file.close()
```
行間會間隔一行，為什麼？

## writelines()
把list寫進檔案(不會自動加換行)。
```python=
file = open('some_file.txt', 'w')
to_write = ['Hello', 'world', '!']
file.writelines(to_write)
file.close()
# Helloworld!
```

```python=
file = open('some_file.txt', 'w')
to_write = ['Hello\n', 'world\n', '!\n']
file.writelines(to_write)
file.close()
# Hello
# world
# !
```

## tell()、seek()
待補

## Lab
參考收據、發票，建立出格式。並讓使用者根據情況結帳，然後獲得收據。
把收據用文字檔案輸出。