Wpis z mikrobloga

Mircy, mam problem - potrzebuję skonwertować pewien plik CSV na inny plik CSV, używając tylko niektórych kolumn z tego pierwszego, z czego na kilku potrzebuję wykonać pewne podstawowe operacje (w stylu: jeżeli w kolumnie 16 jest "0", to w kolumnie 22 pliku wynikowego ma być pewien konkretny łańcuch znaków). Jako że kiedyś bawiłem się Pythonem( ͡° ͜ʖ ͡°), to postanowiłem spróbować zrobić to w tym języku. Problem w tym, że to było za bardzo kiedyś... i nie mam zupełnie pomysłu jak się za to zabrać. Czytałem już o bibliotece csv i pandas, ale szczerze mówiąc po otwarciu i ewentualnie wyświetleniu zawartości pierwszego pliku, nie wiem, co z tym dalej zrobić. Może ktoś z Was miał podobny problem, ewentualnie zna jakieś proste rozwiązanie?
#programowanie #programista15k #python #pytanie
  • 5
@rastafarian0010: Mi się najwygodniej używa xlrd, ale to dlatego, że w moim korpo jest też sporo excela. Po prostu weź dowolną bibliotekę, przeczytaj dokumentację i jazda.
Chyba każda biblioteka do csv iteruje po wierszach. Po prostu wybierz kolumny które potrzebujesz (możesz po prostu chamsko zapisać ich listę) i w locie zapisuj do innego pliku tylko te, które Cię interesują.
@luzny_lori: Okej, tylko chodzi o to, że nie wszystkie kolumny będą mi potrzebne, w pierwszym pliku jest ich 66, a wynikowym ma być ich 28, z czego w części z nich będzie zawsze jeden string, a na części trzeba wykonać dodatkowe operacje. I tu właśnie się wykładam - nie wiem jak to wybiórczo powyciągać. Ale dziękuję za naprowadzenie na metodę :)
@rastafarian0010: po instancji csv.reader się po prostu przeiterowujesz, wiersz po wierszu. każdy wiersz to krotka wartości kolumn dla danego wiersza, indeksowana od 0 tj. wiersz[0] to wartość wiersza w pierwszej kolumnie.

instancja csv.writer udostępnia metodę .writerow, która bierze krotkę (wiersz) i wpisuje do pliku

tak z grubsza i to wcale nie dużo inaczej niż w dokumentacji:

with open('plik_wejsciowy') as fin, open('plik_wynikowy', 'wb') as fout:
__reader, writer = csv.reader(fin), csv.writer(fout)
__for