Jestem nowy w Pythonie. Muszę zapisać dane z mojego programu do arkusza kalkulacyjnego. Szukałem online i wydaje mi się, że jest dostępnych wiele pakietów (xlwt, XlsXcessive, openpyxl). Inni sugerują, aby pisać do pliku .csv (nigdy nie używali CSV i tak naprawdę nie rozumieją, co to jest).
Program jest bardzo prosty. Mam dwie listy (float) i trzy zmienne (stringi). Nie znam długości obu list i prawdopodobnie nie będą one tej samej długości.
Chcę, żeby układ był taki jak na poniższym obrazku:
Różowa kolumna będzie zawierać wartości z pierwszej listy, a zielona kolumna - wartości z drugiej listy.
Więc jaki jest najlepszy sposób, aby to zrobić?
PS Używam systemu Windows 7, ale niekoniecznie będę mieć zainstalowany pakiet Office na komputerach z tym programem.
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
Napisałem to korzystając ze wszystkich twoich sugestii. Wykonuje swoją pracę, ale można ją nieco poprawić.
Jak sformatować komórki utworzone w pętli for (wartości listy1) jako naukowe lub liczbowe?
Nie chcę skracać wartości. Rzeczywiste wartości używane w programie miałyby około 10 cyfr po przecinku.
Odpowiedzi:
więcej wyjaśnień: https://github.com/python-excel
źródło
xlwt
służy tylko do zapisywania starych.xls
plików dla programu Excel 2003 lub wcześniejszego. Może to być nieaktualne (w zależności od Twoich potrzeb).Użyj DataFrame.to_excel z pand . Pandy pozwalają na reprezentowanie danych w bogatych funkcjonalnie strukturach danych i umożliwiają czytanie również w plikach Excel.
Najpierw musisz przekonwertować dane na ramkę DataFrame, a następnie zapisać je w pliku Excela, jak poniżej:
a plik Excela, który się pojawi, wygląda następująco:
Pamiętaj, że obie listy muszą mieć taką samą długość, w przeciwnym razie pandy będą narzekać. Aby rozwiązać ten problem, zamień wszystkie brakujące wartości na
None
.źródło
xlwt
też jest używane , ale otrzymujęopenpyxl
błąd. Dla każdego, kto jest przez to zdezorientowany - wszystko jest w żądanym typie pliku. Dokumentacja pandy (0.12) mówi: „Pliki z.xls
rozszerzeniem zostaną zapisane przy użyciu xlwt, a te z.xlsx
rozszerzeniem zostaną zapisane przy użyciu openpyxl”.xlrd / xlwt (standard): Python nie ma tej funkcjonalności w swojej bibliotece standardowej, ale myślę o xlrd / xlwt jako o „standardowym” sposobie odczytu i zapisu plików Excela. Tworzenie skoroszytu, dodawanie arkuszy, zapisywanie danych / formuł i formatowanie komórek jest dość łatwe. Jeśli potrzebujesz wszystkich tych rzeczy, możesz odnieść największy sukces z tą biblioteką. Myślę, że mógłbyś zamiast tego wybrać openpyxl i byłoby to całkiem podobne, ale ja go nie używałem.
Aby sformatować komórki za pomocą xlwt, zdefiniuj a
XFStyle
i dołącz styl podczas pisania do arkusza. Oto przykład z wieloma formatami liczb . Zobacz przykładowy kod poniżej.Tablib (potężny, intuicyjny): Tablib to bardziej wydajna, ale intuicyjna biblioteka do pracy z danymi tabelarycznymi. Może pisać skoroszyty programu Excel z wieloma arkuszami, a także innymi formatami, takimi jak csv, json i yaml. Jeśli nie potrzebujesz sformatowanych komórek (takich jak kolor tła), zrobisz sobie przysługę, korzystając z tej biblioteki, co na dłuższą metę pozwoli Ci dotrzeć dalej.
csv (łatwy): Pliki na twoim komputerze są w formacie tekstowym lub binarnym . Pliki tekstowe to tylko znaki, w tym znaki specjalne, takie jak nowe linie i tabulatory, i można je łatwo otwierać w dowolnym miejscu (np. W notatniku, przeglądarce internetowej lub w produktach pakietu Office). Plik CSV to plik tekstowy sformatowany w określony sposób: każda linia to lista wartości oddzielonych przecinkami. Programy w języku Python mogą z łatwością odczytywać i zapisywać tekst, więc plik csv jest najłatwiejszym i najszybszym sposobem na wyeksportowanie danych z programu w języku Python do programu Excel (lub innego programu w języku Python).
Pliki Excel są binarne i wymagają specjalnych bibliotek, które znają format plików, dlatego do ich odczytu / zapisu potrzebujesz dodatkowej biblioteki dla języka Python lub specjalnego programu, takiego jak Microsoft Excel, Gnumeric lub LibreOffice.
źródło
Przeanalizowałem kilka modułów Excela dla Pythona i odkryłem, że openpyxl jest najlepszy.
Bezpłatna książka Automate the Boring Stuff with Python zawiera rozdział o openpyxl zawierający więcej szczegółów lub możesz sprawdzić stronę Read the Docs . Nie będziesz potrzebować zainstalowanego pakietu Office ani Excel, aby korzystać z openpyxl.
Twój program wyglądałby mniej więcej tak:
źródło
CSV oznacza wartości oddzielone przecinkami. CSV jest jak plik tekstowy i można go utworzyć, dodając po prostu rozszerzenie .CSV
na przykład napisz ten kod:
możesz otworzyć ten plik w programie Excel.
źródło
é
lub中
, lepiej zróbf.write('\xEF\xBB\xBF')
zaraz poopen()
. To jest BOM ( znak kolejności bajtów , qv), potrzebny oprogramowaniu firmy Microsoft do rozpoznania kodowania UTF-8źródło
Spróbuj też przyjrzeć się następującym bibliotekom:
xlwings - do pobierania danych do i z arkusza kalkulacyjnego z Pythona, a także do manipulowania skoroszytami i wykresami
ExcelPython - dodatek do Excela do pisania funkcji zdefiniowanych przez użytkownika (UDF) i makr w Pythonie zamiast VBA
źródło
OpenPyxl
to całkiem fajna biblioteka, zbudowana do odczytu / zapisu plików Excel 2010 xlsx / xlsm:https://openpyxl.readthedocs.io/en/stable
Inną odpowiedzią , odnoszącą się do tego, jest użycie zdepercjowanej funkcji (
get_sheet_by_name
). Oto jak to zrobić bez niego:źródło
FileNotFoundError: [Errno 2] No such file or directory: 'New.xlsx'
openpyxl.load_workbook
ładuje skoroszyt, który jest już obecny. Utwórz plik,New.xlsx
aby uniknąć tego błędu.xlsxwriter
Biblioteka jest świetna do tworzenia.xlsx
plików. Poniższy fragment kodu generuje.xlsx
plik z listy dykt podczas określania kolejności i wyświetlanych nazw :źródło
Najłatwiejszym sposobem zaimportowania dokładnych liczb jest dodanie ułamka dziesiętnego po liczbach w
l1
il2
. Python interpretuje ten przecinek dziesiętny jako instrukcje od Ciebie, aby uwzględnić dokładną liczbę. Jeśli chcesz ograniczyć to do jakiegoś miejsca dziesiętnego, powinieneś być w stanie utworzyć polecenie drukowania, które ogranicza wynik, coś prostego, takiego jak:Ograniczy to do dziesiątego miejsca po przecinku, zakładając, że twoje dane mają dwie liczby całkowite na lewo od miejsca dziesiętnego.
źródło
Możesz wypróbować hfexcel Human Friendly zorientowaną obiektowo bibliotekę Pythona opartą na XlsxWriter :
źródło
Jeśli potrzebujesz zmodyfikować istniejący skoroszyt, najbezpieczniejszym sposobem byłoby użycie pyoo . Musisz mieć zainstalowane biblioteki, a przejście przez nie wymaga kilku obręczy, ale po skonfigurowaniu byłoby to kuloodporne, ponieważ wykorzystujesz szerokie i solidne API LibreOffice / OpenOffice.
Proszę zapoznać się z moim streszczeniem, jak skonfigurować system linux i wykonać podstawowe kodowanie przy użyciu pyoo.
Oto przykład kodu:
źródło