Mam dane, do których dostęp uzyskuje się poprzez żądanie http i są odsyłane przez serwer w formacie oddzielonym przecinkami, mam następujący kod:
site= 'www.example.com'
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text=str(soup)
Treść tekstu jest następująca:
april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9
Jak mogę zapisać te dane w pliku CSV. Wiem, że mogę zrobić coś w następujący sposób, aby iterować wiersz po wierszu:
import StringIO
s = StringIO.StringIO(text)
for line in s:
Ale nie jestem pewien, jak teraz poprawnie zapisać każdy wiersz do CSV
EDYTUJ ---> Dzięki za opinię, zgodnie z sugestią, rozwiązanie było dość proste i można je zobaczyć poniżej.
Rozwiązanie:
import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
for line in s:
f.write(line)
StringIO
importu. Ponadto rozwiązanie takie, jakie jest, prawdopodobnie nie oddziela linii, ponieważf.write()
nie dodaje automatycznie nowych linii.Odpowiedzi:
Ogólny sposób:
LUB
Korzystanie z narzędzia do zapisywania CSV:
LUB
Najprostszy sposób:
źródło
with open(<path to output_csv>, "w", newline='') as csv_file:
for line in data:
. Proszę to naprawić. Dziękuję Ci.'a'
(tryb dołączania) zamiast'w'
(tryb zapisu).Możesz po prostu pisać do pliku tak, jak zapisujesz każdy normalny plik.
Jeśli tak na wszelki wypadek jest to lista list, możesz bezpośrednio skorzystać z wbudowanego
csv
modułuźródło
Po prostu zapisałbym każdą linię do pliku, ponieważ jest już w formacie CSV:
Nie pamiętam w tej chwili, jak pisać linie ze znakami końca linii: s
Ponadto, może chcesz przyjrzeć się tej odpowiedzi o
write()
,writelines()
i'\n'
.źródło
Aby uzupełnić poprzednie odpowiedzi, przygotowałem szybką klasę pisania do plików CSV. Ułatwia zarządzanie i zamykanie otwartych plików oraz osiągnięcie spójności i czystszego kodu, jeśli masz do czynienia z wieloma plikami.
Przykładowe użycie:
baw się dobrze
źródło
A co z tym:
źródło