python csv分离sheet
时间: 2023-11-18 14:08:34 浏览: 64
Python中可以使用pandas库来读取和分离csv的sheet。下面是一个示例代码:
```python
import pandas as pd
# 读取csv文件
df = pd.read_csv('example.csv', header=None)
# 分离sheet
sheets = {}
for i in range(1, 4):
sheet_name = f'Sheet{i}'
sheet = df[df[0] == sheet_name].iloc[:, 1:]
sheets[sheet_name] = sheet
# 输出结果
for sheet_name, sheet in sheets.items():
print(f'{sheet_name}:')
print(sheet)
```
上述代码中,首先使用pandas的`read_csv`函数读取csv文件,然后使用`df[df[0] == sheet_name].iloc[:, 1:]`来分离每个sheet。
具体来说,我们可以通过`df[0]`来获取第一列的值,也就是sheet的名称,然后使用条件筛选出对应的行,再使用`iloc[:, 1:]`来选择除了第一列之外的所有列作为该sheet的内容。最后将分离出来的sheet保存到字典`sheets`中。
最后,我们可以遍历字典`sheets`,输出每个sheet的名称和内容。
相关问题
python数据分离excel
你可以使用openpyxl库来读取Excel文件的数据,并将其存储为Python数据类型。首先,你需要加载工作簿和工作表,然后使用循环遍历每个单元格并获取其值。以下是一个示例代码:
```python
import openpyxl
# 加载工作簿
wb = openpyxl.load_workbook('testdata.xlsx')
# 获取工作表
sheet = wb['Sheet1']
# 创建一个空列表来存储数据
data_list = []
# 遍历所有单元格并获取值
for row in sheet.iter_rows(min_row=2, values_only=True):
data_dict = {}
for i, value in enumerate(row, start=1):
header = sheet.cell(row=1, column=i).value
data_dict = value
data_list.append(data_dict)
print(data_list)
```
这段代码假设你的Excel表格中第一行是表头,从第二行开始是数据。代码会将每一行数据存储为一个字典,并将所有字典组成的列表打印出来。
如果你想将数据存储为其他格式,比如CSV文件,你可以使用pandas库。以下是一个示例代码:
```python
import pandas as pd
# 加载工作簿
wb = pd.read_excel('testdata.xlsx', sheet_name='Sheet1')
# 将数据存储为CSV文件
wb.to_csv('output.csv', index=False)
```
这段代码将Excel数据加载到一个pandas的DataFrame中,然后使用to_csv方法将DataFrame存储为CSV文件。你可以指定文件名和是否包含索引。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [python自动化测试之DDT数据驱动,使用excel实现数据分离实战](https://blog.csdn.net/zzhangsiwei/article/details/119560524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [python数据分析,用python对excel表格操作](https://blog.csdn.net/sunlight_meng/article/details/108916946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
import requests from bs4 import BeautifulSoup import openpyxl class LianJiaSpider(): def __init__(self): self.url = 'https://bj.lianjia.com/ershoufang/pg{0}/' self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/109'} def send_request(self, url): resp = requests.get(url, headers=self.headers) if resp.status_code == 200: return resp def parse_html(self, resp): lst = [] html = resp.text bs = BeautifulSoup(html, 'lxml') ul = bs.find('ul', class_='sellListContent') li_list = ul.find_all('li') for item in li_list: title = item.find('div', class_='title').text positionInfo = item.find('div', class_='positionInfo').text address = item.find('div', class_='address').text followInfo = item.find('div', class_='followInfo').text tag = item.find('div', class_='tag').text totalPrice = item.find('div', class_='totalPrice totalPrice2').text unitPrice = item.find('div', class_='unitPrice').text # print(unitPrice) lst.append((title, positionInfo, address, followInfo, tag, totalPrice, unitPrice)) print(lst) self.save(lst) def save(self, lst): wb = openpyxl.Workbook() sheet = wb.active for row in lst: sheet.append(row) continue wb.save('D:/爬虫/链家.csv') def start(self): for i in range(1, 5): full_url = self.url.format(i) resp = self.send_request(full_url) #print(resp.text) self.parse_html(resp) if __name__ == '__main__': lianjia = LianJiaSpider() lianjia.start()使用以上代码爬取数据保存到文件中只显示最后一页30条数据,前面页码的数据都被覆盖了,如何更改
在 `save` 方法中,每次循环都重新创建了一个新的 `Workbook` 对象,因此在保存数据时会覆盖之前的数据。您可以将 `Workbook` 对象的创建放在 `__init__` 方法中,这样每次保存数据时都可以使用同一个 `Workbook` 对象。另外,您还可以将文件名中的页码部分替换为变量 `i`,这样每次保存的文件都会有不同的文件名,不会被覆盖。修改后的代码如下:
```python
import requests
from bs4 import BeautifulSoup
import openpyxl
class LianJiaSpider():
def __init__(self):
self.url = 'https://bj.lianjia.com/ershoufang/pg{0}/'
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/109'}
self.wb = openpyxl.Workbook()
self.sheet = self.wb.active
self.sheet.append(('标题', '位置', '地址', '关注信息', '标签', '总价', '单价'))
def send_request(self, url):
resp = requests.get(url, headers=self.headers)
if resp.status_code == 200:
return resp
def parse_html(self, resp):
html = resp.text
bs = BeautifulSoup(html, 'lxml')
ul = bs.find('ul', class_='sellListContent')
li_list = ul.find_all('li')
for item in li_list:
title = item.find('div', class_='title').text
positionInfo = item.find('div', class_='positionInfo').text
address = item.find('div', class_='address').text
followInfo = item.find('div', class_='followInfo').text
tag = item.find('div', class_='tag').text
totalPrice = item.find('div', class_='totalPrice totalPrice2').text
unitPrice = item.find('div', class_='unitPrice').text
self.sheet.append((title, positionInfo, address, followInfo, tag, totalPrice, unitPrice))
print('第{}页数据爬取完成'.format(i))
def save(self):
self.wb.save('D:/爬虫/链家_{}.csv'.format(i))
def start(self):
for i in range(1, 5):
full_url = self.url.format(i)
resp = self.send_request(full_url)
self.parse_html(resp)
self.save()
if __name__ == '__main__':
lianjia = LianJiaSpider()
lianjia.start()
```
在修改后的代码中,我将文件名改为了 `"D:/爬虫/链家_{}.csv".format(i)`,这样每次保存的文件名都会包含页码,不会被覆盖。同时,我将保存数据的操作从 `parse_html` 方法中分离出来,放在了单独的 `save` 方法中,并且在 `__init__` 方法中创建了 `Workbook` 对象和表头。这样就可以避免每次循环都重新创建一个新的 `Workbook` 对象,从而避免了数据被覆盖的问题。
阅读全文