Mam plik CSV o nazwie „A.csv”. Muszę wygenerować nowy plik CSV o nazwie „B.csv” z danymi z „A.csv”.
Będę używał podzbioru kolumn z „A.csv” i będę musiał zaktualizować wartości jednej kolumny do nowych wartości w „B.csv”. Ostatecznie wykorzystam te dane z B.csv do sprawdzenia poprawności w bazie danych.
- Jak utworzyć nowy plik CSV?
- Jak skopiować dane wymaganych kolumn z pliku A.csv do „B.csv”?
- Jak dołączyć wartości dla określonej kolumny?
Jestem nowy w Rubim, ale mogę odczytać CSV, aby uzyskać tablicę lub skrót.
Odpowiedzi:
Jak zauważył mikeb, istnieją dokumenty - http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html - Lub możesz śledzić poniższe przykłady (wszystkie są przetestowane i pracujący):
Aby utworzyć nowy plik:
W tym pliku będziemy mieć dwa wiersze, wiersz nagłówka i wiersz danych, bardzo prosty plik CSV:
require "csv" CSV.open("file.csv", "wb") do |csv| csv << ["animal", "count", "price"] csv << ["fox", "1", "$90.00"] end
w wyniku otrzymamy plik o nazwie „file.csv” z następującymi elementami:
animal,count,price fox,1,$90.00
Jak dołączyć dane do pliku CSV
Prawie taka sama formuła jak powyżej, ale zamiast używać trybu „wb”, użyjemy trybu „a +”. Aby uzyskać więcej informacji na ten temat, zobacz odpowiedź przepełnienia stosu: Jakie są tryby i opcje Ruby File.open?
CSV.open("file.csv", "a+") do |csv| csv << ["cow", "3","2500"] end
Teraz, kiedy otwieramy nasz plik.csv, mamy:
animal,count,price fox,1,$90.00 cow,3,2500
Przeczytaj z naszego pliku CSV
Teraz wiesz, jak kopiować i zapisywać w pliku, czytać plik CSV, a tym samym pobierać dane do manipulacji, które po prostu robisz:
CSV.foreach("file.csv") do |row| puts row #first row would be ["animal", "count", "price"] - etc. end
Oczywiście jest to jeden ze stu różnych sposobów pobierania informacji z pliku CSV za pomocą tego klejnotu. Aby uzyskać więcej informacji, proponuję odwiedzić dokumentację teraz, gdy masz już elementarz: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
źródło
Widziałeś klasę CSV Rubiego? Wydaje się dość wyczerpujące. Sprawdź to tutaj: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
źródło
Prawdopodobnie będziesz chciał użyć,
CSV::parse
aby pomóc Ruby zrozumieć swój plik CSV jako tabelę danych, którymi jest i umożliwić łatwy dostęp do wartości według nagłówka.Niestety, z dostępnej dokumentacji tej
CSV::parse
metody nie wynika jasno, jak właściwie jej używać do tego celu.Miałem podobne zadanie i znacznie bardziej pomogło mi How to Read & Parse CSV Files With Ruby na rubyguides.com niż dokumentacja CSV lub odpowiedzi wskazujące na to stąd.
Zalecam przeczytanie tej strony w całości. Najważniejsze jest przekształcenie danego pliku CSV w
CSV::Table
obiekt przy użyciu:table = CSV.parse(File.read("cats.csv"), headers: true)
Teraz jest dokumentacja na temat
CSV::Table
zajęć , ale znowu mogą ci pomóc jasne przykłady na stronie rubyguides.com. Jedną z rzeczy, które podkreślę, jest to, że kiedy powiesz,.parse
że oczekujesz nagłówków, wynikowa tabela potraktuje pierwszy wiersz danych jako wiersz[0]
.Prawdopodobnie będziesz szczególnie zainteresowany
.by_col
metodą dostępną dla twojego nowegoTable
obiektu. Pozwoli to na iterację przez różne pozycje indeksu kolumn na wejściu i / lub wyjściu i skopiowanie z jednej do drugiej lub dodanie nowej wartości do wyniku. Jeśli sprawię, że zadziała, wrócę i opublikuję przykład.źródło