利用python 读写csv文件


Posted in Python onSeptember 10, 2020

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", "w", 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", "w", 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文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python处理json数据中的中文
Mar 06 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
Python箱型图处理离群点的例子
Dec 09 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python解压zip包中文乱码解决方法
Nov 27 Python
Django缓存Cache使用详解
Nov 30 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
如何用Python 加密文件
Sep 10 #Python
Python 高效编程技巧分享
Sep 10 #Python
python操作redis数据库的三种方法
Sep 10 #Python
Python计算矩阵的和积的实例详解
Sep 10 #Python
python如何运行js语句
Sep 09 #Python
python如何爬取动态网站
Sep 09 #Python
python如何停止递归
Sep 09 #Python
You might like
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
php生成二维码
2015/08/10 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
Maps Javascript
2007/01/22 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
Python日志模块logging简介
2015/04/13 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python3 求约数的实例
2019/12/05 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
PHP笔试题
2012/02/22 面试题
Ejb技术面试题
2015/04/29 面试题
应用电子技术专业个人求职信
2013/09/21 职场文书
个人近期表现材料
2014/02/11 职场文书