Kode ini membuka url dan menambahkan /names
di akhir dan membuka halaman dan mencetak string ke test1.csv
:
import urllib2
import re
import csv
url = ("http://www.example.com")
bios = [u'/name1', u'/name2', u'/name3']
csvwriter = csv.writer(open("/test1.csv", "a"))
for l in bios:
OpenThisLink = url + l
response = urllib2.urlopen(OpenThisLink)
html = response.read()
item = re.search('(JD)(.*?)(\d+)', html)
if item:
JD = item.group()
csvwriter.writerow(JD)
else:
NoJD = "NoJD"
csvwriter.writerow(NoJD)
Tapi saya mendapatkan hasil ini:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Jika saya mengubah string menjadi ("JD", "Columbia Law School" ....) maka saya dapatkan
JD, Columbia Law School...)
Saya tidak bisa menemukan di dokumentasi bagaimana menentukan pembatas.
Jika saya mencoba menggunakan delimenter
saya mendapatkan kesalahan ini:
TypeError: 'delimeter' is an invalid keyword argument for this function
Terima kasih untuk bantuannya.
delimiter
dan bukandelimeter
: docs.python.org/library/csv.htmlJawaban:
Ia mengharapkan urutan (misalnya: daftar atau tupel) string. Anda memberikannya satu string. Sebuah string kebetulan juga merupakan urutan string, tetapi itu adalah urutan string 1 karakter, yang bukan yang Anda inginkan.
Jika Anda hanya ingin satu string per baris, Anda dapat melakukan sesuatu seperti ini:
Ini membungkus JD (string) dengan daftar.
sumber
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
menulis tanggal waktu sebagai"2016-11-05 20:30:19"
2016-11-05 13:21:11
tanpa kutipan. Versi Python apa yang Anda gunakan?Kelas csv.writer melakukan iterable sebagai argumennya ke writerow; karena string dalam Python dapat diulang menurut karakter, mereka adalah argumen yang dapat diterima untuk writerow, tetapi Anda mendapatkan keluaran di atas.
Untuk memperbaikinya, Anda dapat membagi nilai berdasarkan spasi (saya berasumsi itulah yang Anda inginkan)
sumber
Ini terjadi, karena ketika metode group () dari instance MatchObject hanya mengembalikan satu nilai, ia mengembalikannya sebagai string. Jika ada beberapa nilai, nilai tersebut dikembalikan sebagai tupel string.
Jika Anda menulis sebuah baris, saya kira, csv.writer mengulang objek yang Anda berikan padanya. Jika Anda melewatkan satu string (yang merupakan sebuah iterable), ia mengulangi karakternya, menghasilkan hasil yang Anda amati. Jika Anda meneruskan tupel string, string tersebut akan mendapatkan string yang sebenarnya, bukan karakter tunggal pada setiap iterasi.
sumber