python:读取CSV文件的相关技巧

最近在做爬取网站数据的工作,需要将爬到的数据保存为.csv文件。接下来,我将分别介绍使用pandas模块和使用csv模块读写csv文件的方法。

1.使用pandas写csv文件

(1)只写入一列

#single column
import pandas as pd

list = ['a','b','c','d','e']
df = pd.DataFrame(list)
df.to_csv('SingleList.csv')
首先,定义列表list,然后使用pandas模块的DataFrame方法,向csv文件中写入一列。

得到的文件截图如下:


(2)逐列写入csv文件

#write by column
import pandas as pd
list = ['a','b','c','d','e']
datas = {}
datas['a'] = ['a1','a2','a3','a4']
datas['b'] = ['b1','b2','b3','a4']
datas['c'] = ['c1','c2','c3','c4']
datas['d'] = ['d1','d2','d3','d4']
datas['e'] = ['e1','e2','e3','e4']
cols = pd.DataFrame(columns = list)
for id in list:
    cols[id] = datas[id]
cols.to_csv('ByColumn.csv')
首先,定义列表list,它定义了我们要得到的csv文件的列。

通过cols = pd.DataFrame(columns = list),返回一个DataFrame,也就是cols。

接下来,遍历list中的列,分别对每一列写入数据。

注意:每一列写入的行数应该是一样的。

尝试把:datas['e'] = ['e1','e2','e3','e4']

改为datas['e'] = ['e1','e2','e3','e4',‘e5’],结果保错。


正确运行时,得到的结果为:


(3)逐行写入csv文件

#write by row
import pandas as pd
datas = []
list = ['a','b','c','d','e']
datas.append(['a1','b1','c1','d1','e1'])
datas.append(['a2','b2','c2','d2','e2'])
datas.append(['a3','b3','c3','d3','e3'])
datas.append(['a4','b4','c4','d4','e4'])
cols = pd.DataFrame(columns = list)
for i in range(0,4):
	cols.loc[i] = datas[i]
cols.to_csv('ByRow.csv') 

同理,首先,定义列表list,它定义了我们要得到的csv文件的列。

通过cols = pd.DataFrame(columns = list),返回一个DataFrame,也就是cols。

然后,通过cols.loc[i] = datas[i],来逐行写入数据,注意datas[i]也是一个列表。

正确运行时,得到的结果为:


(4)先逐行,后逐列写入csv文件

首先,需要说明的是,对于同一个DataFrame,逐行和逐列写不能混用。

那么,如果需要写写入几行,再逐列写入,该怎么办呢?

可以用到Pandas的concat功能。先看代码:

#mix
import pandas as pd
list = ['a','b','c','d','e']
cols = pd.DataFrame(columns = list)
cols.loc[0] = ['aa','bb','cc','dd','ee']
datas = {}
datas['a'] = ['a1','a2','a3','a4']
datas['b'] = ['b1','b2','b3','a4']
datas['c'] = ['c1','c2','c3','c4']
datas['d'] = ['d1','d2','d3','d4']
datas['e'] = ['e1','e2','e3','e4']

cols2 = pd.DataFrame(columns = list)
for id in list:
    cols2[id] = datas[id]

result = [cols,cols2]
df = pd.concat(result,ignore_index=True)
df.to_csv('mix.csv') 

也就是说,分别建立两个dataFrame,然后把它们连起来就可以了。

2.使用csv模块中的reader读文件和writer写文件

(1)使用reader读文件

#reader
import csv
csvfile = file(r'ByRow.csv', 'rb')
reader = csv.reader(csvfile)

for line in reader:
	print line

csvfile.close() 
按行读取文件,每一行都是一个list。运行结果如下:


(2)使用writer写文件

首先,来看一下如何写一个新的文件

写多行:

#write multiple rows
csvfile = file(r'newWritten.csv', 'wb')
writer = csv.writer(csvfile)
res = []
res.append(['a','b','c','d','e'])
res.append(['a','b','c','d','e'])
writer.writerows(res)
csvfile.close()

运行结果:


其中,

writerows:用来写多行

writerow:用来写一行

我们用writerow来替换writerows试试看:

#write single rows
csvfile = file(r'newWritten.csv', 'wb')
writer = csv.writer(csvfile)
res = []
res.append(['a','b','c','d','e'])
res.append(['a','b','c','d','e'])
writer.writerow(res)
csvfile.close()
运行结果:

也就是将一个list写入到了一行中。

由此,我们也可以发现,每次使用writer,写的都是整个文件。

那么,如果我们只是想修改已经存在的csv文件中的部分内容呢?

这里要用到的思路是:先读取csv文件,将读取的内容保存下来,例如以list的形式保存,再对list进行修改。

#modify exist file
#first read
res = []
csvreadfile = file(r'ByRow.csv', 'rb')
reader = csv.reader(csvreadfile)
for line in reader:
	print line
	res.append(line)
csvreadfile.close()

#modify first row
csvfile = file(r'ByRow.csv', 'wb')
writer = csv.writer(csvfile)
res[0] = ['A','B','C','D','E']
writer.writerows(res)
csvfile.close() 

#read again
csvreadfile = file(r'ByRow.csv', 'rb')
reader = csv.reader(csvreadfile)
for line in reader:
	print line
csvreadfile.close()
运行结果:

-------------------------------------------------------------------------------------------------------------------------------------------

怎么样,对csv文件的基本操作,你学会了吗?



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种功能强大的编程语言,可以使用它来获取CSV文件中指定的行。CSV文件是使用逗号分隔的值文件,其中每一行表示一个数据记录,每一表示该记录的不同属性。以下是如何在Python中获取指定行的方法: 首先,我们需要使用Python中的CSV模块来读取CSV文件。使用CSV模块中的Reader函数将CSV文件读入Python中。 接下来,我们可以使用循环遍历CSV文件中的行并将它们存储在表中。在获取所有行之后,我们可以使用Python中的表索引来访问指定的行。例如,如果我们想获取第5行,我们可以使用表索引[4]来访问它。 以下是一个简单的Python代码示例,它演示了如何获取CSV文件中的指定行: ```python import csv # 打开CSV文件 with open('file.csv', 'r') as csv_file: # 创建CSV读取csv_reader = csv.reader(csv_file) # 存储所有行的表 all_rows = [] # 遍历CSV文件中的每一行并将它们存储在表中 for row in csv_reader: all_rows.append(row) # 获取第5行 row_5 = all_rows[4] # 打印第5行 print(row_5) ``` 在上面的代码中,我们打开名为“file.csv”的CSV文件并创建一个CSV读取器。然后,我们使用for循环遍历文件中的每一行并将它们存储在名为“all_rows”的表中。最后,我们使用索引[4]从表中获取第5行并将其存储在名为“row_5”的变量中,然后打印它。 总之,Python可以轻松获取CSV文件中的指定行,使用CSV模块进行读取,并使用Python表索引来访问这些行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值