Mam kolumny danych, w których kolumna danychzakresy szeroko szerokości. Chciałbym wyświetlać te dane czcionką o stałej szerokości, aby ułatwić przeglądanie, a jednocześnie zachować możliwości analizowania danych za pomocą popularnych programów obsługi CSV.
Jestem skłonny zaakceptować, że operacje paskowania mogą wymagać operacji strip / trim i nie martwię się, że zachowywana jest wiodąca / kończąca się biała przestrzeń.
Jak mogę napisać csv z kolumnami o stałej szerokości? Czy to możliwe z csv
moduł?
W terminach Open / Libre Office jest to nazywane "Stała szerokość kolumny" w opcjach eksportu pliku tekstowego.
Przykład
data = [
("Brown Fox Jumps Over", "Lorem ipsum",),
("The Lazy", "dolor sit amet,",),
("Dog", "consectetur adipiscing elit.",),
]
Pożądane wyjście
"Header 1 ", "Header 2 ",
"Brown Fox Jumps Over", "Lorem ipsum ",
"The Lazy ", "dolor sit amet, ",
"Dog ", "consectetur adipiscing elit.",
Głównie szukam narzędzia do skanowania zbioru danych pod kątem jego najszerszych wartości i formatu, a następnie całą kolumnę do tej szerokości dla wszystkich kolumn, ponieważ pisać samemu inline wydaje się nieodpowiednie.
Odpowiedzi:
3 dla odpowiedzi № 1Posługiwać się str.format
?
In [1]: "{0: <10}".format("lorem")
Out[1]: "lorem "
In [2]: "{0: <10}".format("lorem ipsum")
Out[2]: "lorem ipsum"
Coś jak,
lines = ["lorem ipsum", "dolor sit amet"]
with open("foo.txt", "w") as foo:
for line in lines:
words = line.split()
formatted = " ".join(["{0: <5}".format(word) for word in words])
foo.write(formatted + "n")
$ cat foo.txt
lorem ipsum
dolor sit amet
Możesz wtedy użyć pandas
przeczytać to dość elegancko
In [1]: df = pd.read_fwf("foo.txt", colspecs=[(0,5),(6,11),(12,17)], header=None)
In [2]: df
Out[2]:
0 1 2
0 lorem ipsum NaN
1 dolor sit amet