Input and Output#
str() function return human-readable representations of values.
repr() generate representations which can be read by the interpreter.
For objects which don’t have a particular representation for human consumption, str() will return the same value as repr().
s = 'Hello, world.'
str(s)
'Hello, world.'
l = list(range(4))
str(l)
'[0, 1, 2, 3]'
repr(s)
"'Hello, world.'"
repr(l)
'[0, 1, 2, 3]'
x = 10 * 3.25
y = 200 * 200
s = 'The value of x is ' + str(x) + ', and y is ' + repr(y) + '...'
print(s)
The value of x is 32.5, and y is 40000...
repr() of a string adds string quotes and backslashes:
hello = 'hello, world\n'
hellos = repr(hello)
hellos
"'hello, world\\n'"
The argument to repr() may be any Python object:
repr((x, y, ('spam', 'eggs')))
"(32.5, 40000, ('spam', 'eggs'))"
n = 7
for x in range(1, n):
for i in range(n):
print(repr(x**i).rjust(i+2), end=' ') # rjust or center can be used
print()
1 1 1 1 1 1 1
1 2 4 8 16 32 64
1 3 9 27 81 243 729
1 4 16 64 256 1024 4096
1 5 25 125 625 3125 15625
1 6 36 216 1296 7776 46656
for x in range(1, n):
for i in range(n):
print("%07d" % x**i, end=' ') # old C format
print()
0000001 0000001 0000001 0000001 0000001 0000001 0000001
0000001 0000002 0000004 0000008 0000016 0000032 0000064
0000001 0000003 0000009 0000027 0000081 0000243 0000729
0000001 0000004 0000016 0000064 0000256 0001024 0004096
0000001 0000005 0000025 0000125 0000625 0003125 0015625
0000001 0000006 0000036 0000216 0001296 0007776 0046656
Usage of the str.format()
method#
print('We are at the {} in {}!'.format('ENSAI', 'Rennes'))
We are at the ENSAI in Rennes!
print('From {0} to {1}'.format('September 7', 'September 14'))
From September 7 to September 14
print('It takes place at {place}'.format(place='Milon room'))
It takes place at Milon room
import math
print('The value of PI is approximately {:.7g}.'.format(math.pi))
The value of PI is approximately 3.141593.
Formatted string literals (Python 3.6)#
print(f'The value of PI is approximately {math.pi:.4f}.')
The value of PI is approximately 3.1416.
name = "Fred"
print(f"He said his name is {name}.")
print(f"He said his name is {name!r}.")
He said his name is Fred.
He said his name is 'Fred'.
f"He said his name is {repr(name)}." # repr() is equivalent to !r
"He said his name is 'Fred'."
width, precision = 10, 4
value = 12.34567
print(f"result: {value:{width}.{precision}f}") # nested fields
result: 12.3457
from datetime import *
today = datetime(year=2017, month=1, day=27)
print(f"{today:%B %d, %Y}") # using date format specifier
January 27, 2017
Reading and Writing Files#
open()
returns a file object, and is most commonly used with file name and accessing mode argument.
f = open('workfile.txt', 'w')
f.write("1. This is a txt file.\n")
f.write("2. \\n is used to begin a new line")
f.close()
!cat workfile.txt
1. This is a txt file.
2. \n is used to begin a new line
mode
can be :
‘r’ when the file will only be read,
‘w’ for only writing (an existing file with the same name will be erased)
‘a’ opens the file for appending; any data written to the file is automatically added to the end.
‘r+’ opens the file for both reading and writing.
The mode argument is optional; ‘r’ will be assumed if it’s omitted.
Normally, files are opened in text mode.
‘b’ appended to the mode opens the file in binary mode.
with open('workfile.txt') as f:
read_text = f.read()
f.closed
True
read_text
'1. This is a txt file.\n2. \\n is used to begin a new line'
lines= []
with open('workfile.txt') as f:
lines.append(f.readline())
lines.append(f.readline())
lines.append(f.readline())
lines
['1. This is a txt file.\n', '2. \\n is used to begin a new line', '']
f.readline()
returns an empty string when the end of the file has been reached.f.readlines()
orlist(f)
read all the lines of a file in a list.
For reading lines from a file, you can loop over the file object. This is memory efficient, fast, and leads to simple code:
with open('workfile.txt') as f:
for line in f:
print(line, end='')
1. This is a txt file.
2. \n is used to begin a new line
Exercise: Wordcount Example#
WordCount is a simple application that counts the number of occurrences of each word in a given input set.
Use lorem module to write a text in the file “sample.txt”
Write a function
words
with file name as input that returns a sorted list of words present in the file.Write the function
reduce
to read the results of words and sum the occurrences of each word to a final count, and then output the results as a dictionary{word1:occurences1, word2:occurences2}
.You can check the results using piped shell commands:
cat sample.txt | fmt -1 | tr [:upper:] [:lower:] | tr -d '.' | sort | uniq -c
from lorem import text
text()
'Velit neque ut non labore. Est adipisci etincidunt quaerat est adipisci porro labore. Aliquam modi ipsum adipisci labore. Sed est quaerat quiquia aliquam non aliquam labore. Quisquam sed est velit quisquam porro modi.\n\nEst magnam est neque. Est etincidunt dolore quiquia. Tempora ipsum quiquia consectetur voluptatem. Ipsum tempora est etincidunt porro modi. Non tempora dolorem dolore velit. Labore quaerat eius numquam quiquia labore.\n\nConsectetur sit labore eius. Dolore quaerat ut quisquam ipsum labore. Dolore dolorem quisquam adipisci numquam tempora labore. Neque adipisci voluptatem velit est magnam dolore. Quaerat dolor magnam ipsum ipsum dolor modi. Est numquam amet aliquam consectetur dolorem. Numquam est quaerat quiquia etincidunt velit. Porro sit sed sed adipisci eius porro tempora.\n\nConsectetur ipsum porro eius. Sit modi labore dolor est ipsum sed sed. Dolor etincidunt non adipisci. Magnam ipsum quaerat dolorem dolore amet consectetur modi. Amet voluptatem labore magnam porro non. Ipsum velit dolorem velit modi sit. Labore dolore eius voluptatem. Neque quaerat dolor dolorem voluptatem dolorem. Dolorem aliquam sit sed neque quiquia.'
def words( file ):
""" Parse a file and returns a sorted list of words """
pass
words('sample.txt')
#[('adipisci', 1),
# ('adipisci', 1),
# ('adipisci', 1),
# ('aliquam', 1),
# ('aliquam', 1),
d = {}
d['word1'] = 3
d['word2'] = 2
d
{'word1': 3, 'word2': 2}
def reduce ( words ):
""" Count the number of occurences of a word in list
and return a dictionary """
pass
reduce(words('sample.txt'))
#{'neque': 80),
# 'ut': 80,
# 'est': 76,
# 'amet': 74,
# 'magnam': 74,
# 'adipisci': 73,
Saving structured data with json#
JSON (JavaScript Object Notation) is a popular data interchange format.
JSON format is commonly used by modern applications to allow for data exchange.
JSON can be used to communicate with applications written in other languages.
import json
json.dumps([1, 'simple', 'list'])
'[1, "simple", "list"]'
x = dict(name="Pierre Navaro", organization="CNRS", position="IR")
with open('workfile.json','w') as f:
json.dump(x, f)
with open('workfile.json','r') as f:
x = json.load(f)
x
{'name': 'Pierre Navaro', 'organization': 'CNRS', 'position': 'IR'}
%cat workfile.json
{"name": "Pierre Navaro", "organization": "CNRS", "position": "IR"}
Use ujson
for big data structures
https://pypi.python.org/pypi/ujson
For common file formats used in data science (CSV, xls, feather, parquet, ORC, HDF, avro, …) use packages like pandas or better pyarrow. It depends of what you want to do with your data but Dask and pyspark offer features to read and write (big) data files.