1. 程式人生 > 程式設計 >利用python 讀寫csv檔案

利用python 讀寫csv檔案

1、讀檔案

import csv
 
csv_reader = csv.reader(open("data.file",encoding="utf-8"))
for row in csv_reader:
  print(row)

csv_reader把每一行資料轉化成了一個list,list中每個元素是一個字串。

2、寫檔案

讀檔案時,我們把csv檔案讀入列表中,寫檔案時會把列表中的元素寫入到csv檔案中。

list = ["1","2","3","4"]
out = open(outfile,"w")
csv_writer = csv.writer(out)
csv_writer.writerow(list)

可能遇到的問題:直接使用這種寫法會導致檔案每一行後面會多一個空行。

解決辦法如下:

out = open(outfile,"w",newline="")
csv_writer = csv.writer(out,dialect="excel")
csv_writer.writerow(list)

在stackoverflow上找到了比較經典的解釋,原來 python3裡面對 str和bytes型別做了嚴格的區分,不像python2裡面某些函式裡可以混用。所以用python3來寫wirterow時,開啟檔案不要用wb模式,只需要使用w模式,然後帶上newline=''。

3、示例

  • 簡單讀寫
import csv
 
class writer:
  def __init__(self):
    self.dict = {
      "標題": "標題","連結": "連結","服務": "服務","dsr": "dsr","店鋪名": "店鋪名","價格": "店鋪名","付款人數": "付款人數","發貨地": "發貨地",}
    out = open("outfile.csv",newline="")
    self.csv_writer = csv.writer(out,dialect="excel")
    self.csv_writer.writerow(self.dict)
 
  def writer_to(self,key_value):
    self.csv_writer.writerow(key_value)
 
 
if __name__ == "__main__":
  a = writer()
  new = {
    "連結": "http://www.baidu.com","標題": "我是標題",}
  a.dict.update(new)
  print(a.dict)
  a.writer_to(a.dict.values())
  • 結合爬蟲
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException,NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
 
driver = ["1","2"]
colspan = ["1","2"]
try:
  out = open("類目.csv",newline="")
except PermissionError:
  print("檔案被其他程式佔用")
  input("")
csv_writer = csv.writer(out,dialect="excel")
csv_writer.writerow(["寶貝ID","類目"])
 
 
def open_chrome():
  driver[0] = webdriver.Chrome()
  driver[0].get("https://www.dianchacha.com")
  input("請登陸後按回車:")
 
 
def EC_located(one_group,value):
  """
   目的:簡化程式碼長度,引數1選擇one或者group切換選中模式
  :param value:要找的值【CSS選擇器】
  :return:選擇到的物件
  """
  wait = WebDriverWait(driver[0],10)
  if one_group == "one":
    try:
      ecl = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,value)))
      return ecl
    except TimeoutException:
      print(value,"1元素未載入成功,等待超時")
  else:
    try:
      ecl = wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR,value))
      )
      return ecl
    except TimeoutException:
      print(value,"1元素---組---未載入成功,等待超時")
 
 
def operating(ID):
  # 先獲取ID輸入框
  driver[0].get("https://www.dianchacha.com/item/info/index/iid/" + ID)
  html = driver[0].page_source
  if "未能找到親的寶貝" not in html:
    colspans = EC_located("group",".colspan-1")
    colspan[0] = str(colspans[1].text).replace("寶貝類目: ","")
  else:
    return operating(ID)
  print(colspan)
 
 
def writer_txt():
  csv_writer.writerow([url[0],colspan[0]])
  print("儲存",url[0],colspan[0],"成功")
 
 
url = ["0","1"]
 
 
def main():
  open_chrome()
  file = "寶貝ID.txt"
  with open(file) as f:
    for line in f.readlines():
      url[0] = line
      print(line)
      operating(url[0])
      writer_txt()
    out.close()
    print("已完成")
 
 
if __name__ == "__main__":
  main()

以上就是利用python 讀寫csv檔案的詳細內容,更多關於python 讀寫csv檔案的資料請關注我們其它相關文章!