7.3. CSV Format Write¶
7.3.1. Assignments¶
"""
* Assignment: CSV Format WriteListDict
* Complexity: easy
* Lines of code: 4 lines
* Time: 5 min
English:
1. Convert `DATA` to CSV as `result: str`:
a. do not add header
a. firstname - first field
c. lastname - second field
2. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: None
c. Quoting: None
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Run doctests - all must succeed
Polish:
1. Przekonwertuj `DATA` do CSV jako `result: str`:
a. nie dodawaj nagłówka
b. imię - pierwsze pole
c. nazwisko - drugie pole
2. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: None
c. Quoting: None
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result) # doctest: +NORMALIZE_WHITESPACE
Pan,Twardowski
Rick,Martinez
Mark,Watney
Ivan,Ivanovic
Melissa,Lewis
<BLANKLINE>
"""
DATA = [
{'firstname': 'Pan', 'lastname': 'Twardowski'},
{'firstname': 'Rick', 'lastname': 'Martinez'},
{'firstname': 'Mark', 'lastname': 'Watney'},
{'firstname': 'Ivan', 'lastname': 'Ivanovic'},
{'firstname': 'Melissa', 'lastname': 'Lewis'},
]
# multiline string with `firstname,lastname` pairs
# type: str
result = ...
"""
* Assignment: CSV Format WriteFixed
* Complexity: medium
* Lines of code: 5 lines
* Time: 5 min
English:
1. Convert `DATA` to CSV as `result: str`:
a. add header
a. firstname - first field
c. lastname - second field
2. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: `"`
c. Quoting: always
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Run doctests - all must succeed
Polish:
1. Przekonwertuj `DATA` do CSV jako `result: str`:
a. dodaj nagłówek
b. imię - pierwsze pole
c. nazwisko - drugie pole
2. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: `"`
c. Quoting: zawsze
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result) # doctest: +NORMALIZE_WHITESPACE
"firstname","lastname"
"Pan","Twardowski"
"Rick","Martinez"
"Mark","Watney"
"Ivan","Ivanovic"
"Melissa","Lewis"
<BLANKLINE>
"""
DATA = [
{'firstname': 'Pan', 'lastname': 'Twardowski'},
{'firstname': 'Rick', 'lastname': 'Martinez'},
{'firstname': 'Mark', 'lastname': 'Watney'},
{'firstname': 'Ivan', 'lastname': 'Ivanovic'},
{'firstname': 'Melissa', 'lastname': 'Lewis'},
]
# multiline string with header and `"firstname","lastname"` pairs
# type: str
result = ...
"""
* Assignment: CSV Format WriteSchemaless
* Complexity: hard
* Lines of code: 13 lines
* Time: 13 min
English:
1. Define `header: str` with sorted list of unique keys from `DATA`
2. `header` must be automatically generated from `DATA`
3. Iterate over `DATA` and extract values for each header column
4. Define `result: str` with header and matching values
5. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: `"`
c. Quoting: always
d. Delimiter: `,`
e. Lineseparator: `\n`
f. Sort `fieldnames`
6. Run doctests - all must succeed
Polish:
1. Zdefiniuj `header: str` z posortowaną listą unikalnych kluczy z `DATA`
2. `header` musi być generowany automatycznie z `DATA`
3. Iteruj po `DATA` i wyciągnij wartości dla każdej kolumny z nagłówka
4. Zdefiniuj `result: str` z nagłówkiem i pasującymi wartościami
5. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: `"`
c. Quoting: zawsze
d. Delimiter: `,`
e. Lineseparator: `\n`
f. Posortuj `fieldnames`
6. Uruchom doctesty - wszystkie muszą się powieść
Hint:
* sorted()
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result)
"petal_length","petal_width","sepal_length","sepal_width","species"
"","","5.1","3.5","setosa"
"4.1","1.3","","","versicolor"
"","1.8","6.3","","virginica"
"","0.2","5.0","","setosa"
"4.1","","","2.8","versicolor"
"","1.8","","2.9","virginica"
<BLANKLINE>
"""
DATA = [
{'sepal_length': 5.1, 'sepal_width': 3.5, 'species': 'setosa'},
{'petal_length': 4.1, 'petal_width': 1.3, 'species': 'versicolor'},
{'sepal_length': 6.3, 'petal_width': 1.8, 'species': 'virginica'},
{'sepal_length': 5.0, 'petal_width': 0.2, 'species': 'setosa'},
{'sepal_width': 2.8, 'petal_length': 4.1, 'species': 'versicolor'},
{'sepal_width': 2.9, 'petal_width': 1.8, 'species': 'virginica'},
]
# header has unique keys from DATA, row values match header columns
# type: str
result = ...
"""
* Assignment: CSV Format WriteListTuple
* Complexity: easy
* Lines of code: 3 lines
* Time: 5 min
English:
1. Define `result: str` with `DATA` converted to CSV format
2. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: None
c. Quoting: never
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` przekonwertowaną do formatu CSV
2. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: None
c. Quoting: nigdy
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result)
sepal_length,sepal_width,petal_length,petal_width,species
5.8,2.7,5.1,1.9,virginica
5.1,3.5,1.4,0.2,setosa
5.7,2.8,4.1,1.3,versicolor
6.3,2.9,5.6,1.8,virginica
6.4,3.2,4.5,1.5,versicolor
4.7,3.2,1.3,0.2,setosa
7.0,3.2,4.7,1.4,versicolor
7.6,3.0,6.6,2.1,virginica
4.9,3.0,1.4,0.2,setosa
<BLANKLINE>
"""
DATA = [
('sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species'),
(5.8, 2.7, 5.1, 1.9, 'virginica'),
(5.1, 3.5, 1.4, 0.2, 'setosa'),
(5.7, 2.8, 4.1, 1.3, 'versicolor'),
(6.3, 2.9, 5.6, 1.8, 'virginica'),
(6.4, 3.2, 4.5, 1.5, 'versicolor'),
(4.7, 3.2, 1.3, 0.2, 'setosa'),
(7.0, 3.2, 4.7, 1.4, 'versicolor'),
(7.6, 3.0, 6.6, 2.1, 'virginica'),
(4.9, 3.0, 1.4, 0.2, 'setosa'),
]
# DATA converted to CSV format
# type: str
result = ...
"""
* Assignment: CSV Format WriteListDict
* Complexity: medium
* Lines of code: 7 lines
* Time: 8 min
English:
1. Define `result: str` with `DATA` converted to CSV format
2. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: None
c. Quoting: never
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` przekonwertowaną do formatu CSV
2. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: None
c. Quoting: nigdy
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Uruchom doctesty - wszystkie muszą się powieść
Hints:
* `vars(obj)`
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result)
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
5.8,2.7,5.1,1.9,virginica
5.1,3.5,1.4,0.2,setosa
5.7,2.8,4.1,1.3,versicolor
6.3,2.9,5.6,1.8,virginica
6.4,3.2,4.5,1.5,versicolor
<BLANKLINE>
"""
DATA = [
{'sepal_length': 5.1, 'sepal_width': 3.5, 'petal_length': 1.4, 'petal_width': 0.2, 'species': 'setosa'},
{'sepal_length': 5.8, 'sepal_width': 2.7, 'petal_length': 5.1, 'petal_width': 1.9, 'species': 'virginica'},
{'sepal_length': 5.1, 'sepal_width': 3.5, 'petal_length': 1.4, 'petal_width': 0.2, 'species': 'setosa'},
{'sepal_length': 5.7, 'sepal_width': 2.8, 'petal_length': 4.1, 'petal_width': 1.3, 'species': 'versicolor'},
{'sepal_length': 6.3, 'sepal_width': 2.9, 'petal_length': 5.6, 'petal_width': 1.8, 'species': 'virginica'},
{'sepal_length': 6.4, 'sepal_width': 3.2, 'petal_length': 4.5, 'petal_width': 1.5, 'species': 'versicolor'},
]
# DATA converted to CSV format
# type: str
result = ...
"""
* Assignment: CSV Format WriteObjects
* Complexity: medium
* Lines of code: 7 lines
* Time: 8 min
English:
1. Define `result: str` with `DATA` converted to CSV format
2. Non-functional requirements:
a. Do not use `import` and any module
b. Quotechar: None
c. Quoting: never
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` przekonwertowaną do formatu CSV
2. Wymagania niefunkcjonalne:
a. Nie używaj `import` ani żadnych modułów
b. Quotechar: None
c. Quoting: nigdy
d. Delimiter: `,`
e. Lineseparator: `\n`
3. Uruchom doctesty - wszystkie muszą się powieść
Hints:
* `vars(obj)`
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be str'
>>> print(result)
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
5.8,2.7,5.1,1.9,virginica
5.1,3.5,1.4,0.2,setosa
5.7,2.8,4.1,1.3,versicolor
6.3,2.9,5.6,1.8,virginica
6.4,3.2,4.5,1.5,versicolor
<BLANKLINE>
"""
class Iris:
def __init__(self, sepal_length, sepal_width,
petal_length, petal_width, species):
self.sepal_length = sepal_length
self.sepal_width = sepal_width
self.petal_length = petal_length
self.petal_width = petal_width
self.species = species
DATA = [
Iris(5.1, 3.5, 1.4, 0.2, 'setosa'),
Iris(5.8, 2.7, 5.1, 1.9, 'virginica'),
Iris(5.1, 3.5, 1.4, 0.2, 'setosa'),
Iris(5.7, 2.8, 4.1, 1.3, 'versicolor'),
Iris(6.3, 2.9, 5.6, 1.8, 'virginica'),
Iris(6.4, 3.2, 4.5, 1.5, 'versicolor'),
]
# DATA converted to CSV format
# type: str
result = ...