利用python 读写csv文件
作者:新码农 发布时间:2023-02-03 14:08:07
标签: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", "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()
来源:https://www.addcoder.com/blog/article_detail/0wx4ritl/


猜你喜欢
- 前言:IPython 是 Python 的原生交互式 shell 的增强版,可以完成许多不同寻常的任务,比如帮助实现并行化计算;主要使用它提
- 目的: 根据传入的选择器类型选出第一个符合的DOM对象。 ①可以通过id获取DOM对象,例如 $("#adom
- Python使用称为Python Path的搜索路径来查找使用import语句导入代码的模块。大多数代码只会汇入已经默认路径上的模块,通过安
- 前言同步适合多个连续执行的,每一步的执行依赖于上一步操作,异步执行则和任务执行顺序无关(如从10个站点抓取数据)同步执行类RunnerAsy
- 前段时间,在pycharm里配置了远程的Python解释器,然后在使用过程中,发现pycharm原来是可以使用Jupyter的文件,而且还可
- (可能只有最后一句命令有用,可能全篇都没用)(小白方法,可能只适用于本人情况)安装matplotlib时,出现的三种失败情况1、read t
- 问题你想将一个多层嵌套的序列展开成一个单层列表解决方案可以写一个包含 yield from 语句的递归生成器来轻松解决这个问题。比如:fro
- mysql字符串格式化今天有一个需求,mysql查询返回的格式为:80% ,而数据库中存储的是0.89的格式sql写法如下:select C
- vue框架移动端做ip输入框组件,input在浏览器和微信端兼容问题。要求:只能输入数字,输入数字以外的字符(包括点、冒号等数字符号)时自动
- 在处理批量更新某些数据的时候,如果跟你更新的字段的值都一样,比如某个状态都更新为某个固定值,直接用update table set xxx=
- 目录1.函数的介绍2.函数的定义和调用3.函数的参数4.参数的分类4.1.位置参数4.2.关键字参数4.3.缺省参数4.4.不定长参数1.不
- 如下所示:import osDIR = "/home/serho/workspace/lisp"def compare(
- 1、简介Burp Suite是用于攻击web应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。
- 什么是触发器?触发器是在对表进行插入、更新或删除操作时自动执行的存储过程。 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触
- 简介虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL
- 函数声明为:func Notify(c chan<- os.Signal, sig ...os.Signal)官方描述:Notify函
- 看了不少朋友的个人网站,有一个小问题,似乎很多朋友都忽略了,那就是版权声明的写法。虽然那只是一小行字,不过作为设计师也好,作为个人的爱好也好
- 一、介绍在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件 * 定部分的
- 1.使用Paramiko登陆到单台交换机实验拓扑云彩桥接到本机环回接口:192.168.1.1/24三层交换机IP:192.168.1.2/
- 前言:在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数。可选查询参数只要给查询参数的默认值设置为None,表示该