---
title: Reading files in Python
tags: Python Cheatbook
---
# Reading files in Python
Read a single file line by line
```python=
import os
your_file = './data/site1/B1/path_data_files/somefile.txt'
if os.path.isfile(your_file):
f = open(your_file, 'r', encoding='utf-8')
for line in f:
print(line) # Do whatever you like here.
f.close()
```
Reading files line by line in a directory
```python=
import os
your_path = './data/site1/B1/path_data_files'
files = os.listdir(your_path)
print('found {} files'.format(len(files)))
for file in files:
if os.path.isfile(os.path.join(your_path, file)):
f = open(os.path.join(your_path, file), 'r', encoding='utf-8')
for line in f:
print(line) # Do whatever you like here.
f.close()
```
- `os.path.isfile(file)` check if its a valid file.
- `open(path, mode, [encoding])` opens a file with given `mode` and optional `encoding` parameter, usually `encoding='utf-8'`.
- `os.path.join(path, file)` Joins two path.
- `file.close()` Closes the filestream.
# Reading a JSON file
```python=
import json
with open(json_file_path) as file:
json_data = json.load(file)
print(json_data['myJsonKey'])
```
- `open(filepath)` opens a file
- `json.load(file)` parses a json filestream to a dictonary object.
# Reading a CSV file [1]
## With `csv` module
```python=
import csv
filename = "car.data"
fields = []
rows = []
with open(filename, 'r') as csvfile:
csvreader = csv.reader(csvfile)
# uncomment to take first row as fields
# fields = next(csvreader)
for row in csvreader:
rows.append(row)
print("Total no. of rows: %d" % (csvreader.line_num))
print('Field names are:' + ', '.join(field for field in fields))
print('\nFirst 5 rows are:')
print('----------------')
for row in rows[:5]:
for col in row:
if col == row[len(row)-1]:
print(col)
else:
print(col, end=',')
```
- `csv` module makes it easy to read csv
- `csv.reader(csvfile)` prepares a csv reader which can iterated to extract csv data
**Output:**
```
Total no. of rows: 1728
Field names are:
First 5 rows are:
----------------
vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
```
Alternatively you can use `pandas` library to read the csv into dataframes and do exploratory data anlysis much easily. [Check the `pandas` tutorial to learn more](https://hackmd.io/9kh0_lzMT46HuevPkckrFw#Read-seperated-value-files-CSV-TSV-etc).
# References
1. https://www.geeksforgeeks.org/working-csv-files-python/