最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用openpyxl/xlrd/xlwt和pandas操作Excel

 更新時間:2026年03月18日 09:33:49   作者:倔強老呂  
Python提供了多個強大的庫來操作Excel文件,主要包括openpyxl、xlrd/xlwt和pandas,下面將介紹這些庫的基本用法,希望對大家有所幫助

Python提供了多個強大的庫來操作Excel文件,主要包括openpyxlxlrd/xlwtpandas。下面將介紹這些庫的基本用法。

1. 使用openpyxl操作Excel

openpyxl是一個流行的庫,用于讀寫Excel 2010 xlsx/xlsm/xltx/xltm文件。

安裝

pip install openpyxl

基本操作

from openpyxl import Workbook, load_workbook
# 創(chuàng)建新工作簿
wb = Workbook()
ws = wb.active  # 獲取活動工作表
ws.title = "Sheet1"  # 設置工作表名稱
# 寫入數據
ws['A1'] = "姓名"
ws['B1'] = "年齡"
ws['A2'] = "張三"
ws['B2'] = 25
# 保存文件
wb.save("example.xlsx")
# 讀取已有文件
wb = load_workbook("example.xlsx")
ws = wb.active
# 讀取數據
for row in ws.iter_rows(values_only=True):
    print(row)
# 修改數據
ws['B2'] = 26
wb.save("example_modified.xlsx")

2. 使用pandas操作Excel

pandas是數據分析的強大工具,也提供了方便的Excel讀寫功能。

安裝

pip install pandas openpyxl

基本操作

import pandas as pd

# 創(chuàng)建DataFrame
data = {
    '姓名': ['張三', '李四', '王五'],
    '年齡': [25, 30, 35],
    '城市': ['北京', '上海', '廣州']
}
df = pd.DataFrame(data)

# 寫入Excel
df.to_excel("pandas_example.xlsx", index=False, sheet_name='員工信息')

# 讀取Excel
df_read = pd.read_excel("pandas_example.xlsx", sheet_name='員工信息')
print(df_read)

# 修改并保存
df_read['年齡'] = df_read['年齡'] + 1
df_read.to_excel("pandas_example_modified.xlsx", index=False)

3. 使用xlrd/xlwt操作舊版Excel

xlrd用于讀取xls文件,xlwt用于寫入xls文件(適用于Excel 2003及更早版本)。

安裝

pip install xlrd xlwt

基本操作

import xlrd
import xlwt

# 寫入xls文件
workbook = xlwt.Workbook()
sheet = workbook.add_sheet('Sheet1')

sheet.write(0, 0, '姓名')
sheet.write(0, 1, '年齡')
sheet.write(1, 0, '張三')
sheet.write(1, 1, 25)

workbook.save('old_example.xls')

# 讀取xls文件
book = xlrd.open_workbook('old_example.xls')
sheet = book.sheet_by_index(0)

for row in range(sheet.nrows):
    print(sheet.row_values(row))

4. 高級操作

使用openpyxl處理樣式

from openpyxl.styles import Font, Alignment, Border, Side

wb = Workbook()
ws = wb.active

# 設置單元格樣式
ws['A1'].font = Font(bold=True, color="FF0000")
ws['A1'].alignment = Alignment(horizontal="center")
ws['A1'].border = Border(left=Side(style='thin'), 
                        right=Side(style='thin'), 
                        top=Side(style='thin'), 
                        bottom=Side(style='thin'))

wb.save("styled_example.xlsx")

使用pandas處理多個sheet

with pd.ExcelWriter('multi_sheet.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2')

5. 性能考慮

對于大型Excel文件:

  • 使用openpyxlread_only模式快速讀取
  • 使用write_only模式快速寫入
  • 考慮使用pandas進行批量操作
# 高性能讀取
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True):
    process(row)
    
# 高性能寫入
from openpyxl import Workbook
wb = Workbook(write_only=True)
ws = wb.create_sheet()
for row in data:
    ws.append(row)
wb.save('large_output.xlsx')

總結

  • 對于簡單的Excel操作,pandas提供了最簡潔的API
  • 對于需要精細控制的Excel文件,openpyxl是更好的選擇
  • 對于舊版Excel文件(xls),可以使用xlrd/xlwt

PyQt5創(chuàng)建Excel操作功能的桌面應用程序

下面將介紹如何使用PyQt5創(chuàng)建一個具有Excel操作功能的桌面應用程序,包括文件打開、數據展示、編輯和保存等功能。

環(huán)境準備

首先安裝必要的庫:

pip install PyQt5 pandas openpyxl xlrd

基本Excel查看器

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView, 
                             QFileDialog, QVBoxLayout, QWidget, 
                             QPushButton, QMessageBox)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import pandas as pd
class ExcelViewer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Excel查看器")
        self.setGeometry(100, 100, 800, 600)
        self.initUI()
        self.current_file = None
    def initUI(self):
        # 主窗口部件
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        # 布局
        self.layout = QVBoxLayout()
        # 按鈕
        self.btn_open = QPushButton("打開Excel文件")
        self.btn_open.clicked.connect(self.open_file)
        self.btn_save = QPushButton("保存修改")
        self.btn_save.clicked.connect(self.save_file)
        self.btn_save.setEnabled(False)
        # 表格視圖
        self.table_view = QTableView()
        self.model = QStandardItemModel()
        self.table_view.setModel(self.model)
        # 添加到布局
        self.layout.addWidget(self.btn_open)
        self.layout.addWidget(self.btn_save)
        self.layout.addWidget(self.table_view)
        self.central_widget.setLayout(self.layout)
    def open_file(self):
        # 打開文件對話框
        file_path, _ = QFileDialog.getOpenFileName(
            self, "打開Excel文件", "", 
            "Excel Files (*.xlsx *.xls);;All Files (*)"
        )
        if file_path:
            try:
                # 使用pandas讀取Excel文件
                self.df = pd.read_excel(file_path)
                self.current_file = file_path
                # 清除舊數據
                self.model.clear()
                # 設置表頭
                self.model.setHorizontalHeaderLabels(self.df.columns)
                # 填充數據
                for row in range(self.df.shape[0]):
                    for col in range(self.df.shape[1]):
                        item = QStandardItem(str(self.df.iloc[row, col]))
                        item.setFlags(item.flags() ^ Qt.ItemIsEditable)  # 默認不可編輯
                        self.model.setItem(row, col, item)
                self.btn_save.setEnabled(True)
            except Exception as e:
                QMessageBox.critical(self, "錯誤", f"無法打開文件:\n{str(e)}")
    def save_file(self):
        if not self.current_file:
            return
        try:
            # 從模型中獲取修改后的數據
            rows = self.model.rowCount()
            cols = self.model.columnCount()
            data = []
            for row in range(rows):
                row_data = []
                for col in range(cols):
                    item = self.model.item(row, col)
                    row_data.append(item.text())
                data.append(row_data)
            # 創(chuàng)建DataFrame并保存
            new_df = pd.DataFrame(data, columns=self.df.columns)
            new_df.to_excel(self.current_file, index=False)
            QMessageBox.information(self, "成功", "文件保存成功!")
        except Exception as e:
            QMessageBox.critical(self, "錯誤", f"保存失敗:\n{str(e)}")
if __name__ == "__main__":
    app = QApplication(sys.argv)
    viewer = ExcelViewer()
    viewer.show()
    sys.exit(app.exec_())

增強版Excel編輯器

下面是一個功能更全面的Excel編輯器實現:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView, QFileDialog, 
                             QVBoxLayout, QHBoxLayout, QWidget, QPushButton, 
                             QMessageBox, QLabel, QLineEdit, QComboBox, QMenu, 
                             QAction, QInputDialog)
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QKeySequence
import pandas as pd
class ExcelEditor(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Excel編輯器")
        self.setGeometry(100, 100, 1000, 700)
        self.current_file = None
        self.df = None
        self.initUI()
    def initUI(self):
        # 主窗口部件
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        # 主布局
        self.main_layout = QVBoxLayout()
        # 頂部工具欄
        self.toolbar_layout = QHBoxLayout()
        self.btn_open = QPushButton("打開")
        self.btn_open.setToolTip("打開Excel文件 (Ctrl+O)")
        self.btn_open.clicked.connect(self.open_file)
        self.btn_save = QPushButton("保存")
        self.btn_save.setToolTip("保存當前文件 (Ctrl+S)")
        self.btn_save.clicked.connect(self.save_file)
        self.btn_save.setEnabled(False)
        self.btn_save_as = QPushButton("另存為")
        self.btn_save_as.setToolTip("另存為新的Excel文件")
        self.btn_save_as.clicked.connect(self.save_file_as)
        self.btn_save_as.setEnabled(False)
        self.btn_add_row = QPushButton("添加行")
        self.btn_add_row.setToolTip("在表格末尾添加新行")
        self.btn_add_row.clicked.connect(self.add_row)
        self.btn_add_row.setEnabled(False)
        self.btn_delete_row = QPushButton("刪除行")
        self.btn_delete_row.setToolTip("刪除選中的行")
        self.btn_delete_row.clicked.connect(self.delete_row)
        self.btn_delete_row.setEnabled(False)
        self.file_label = QLabel("未打開文件")
        self.toolbar_layout.addWidget(self.btn_open)
        self.toolbar_layout.addWidget(self.btn_save)
        self.toolbar_layout.addWidget(self.btn_save_as)
        self.toolbar_layout.addWidget(self.btn_add_row)
        self.toolbar_layout.addWidget(self.btn_delete_row)
        self.toolbar_layout.addStretch()
        self.toolbar_layout.addWidget(self.file_label)
        # 表格視圖
        self.table_view = QTableView()
        self.table_view.setSelectionBehavior(QTableView.SelectRows)
        self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
        self.table_view.customContextMenuRequested.connect(self.show_context_menu)
        self.model = QStandardItemModel()
        self.table_view.setModel(self.model)
        # 搜索欄
        self.search_layout = QHBoxLayout()
        self.search_label = QLabel("搜索:")
        self.search_input = QLineEdit()
        self.search_input.setPlaceholderText("輸入搜索內容...")
        self.search_column = QComboBox()
        self.search_column.addItem("所有列")
        self.search_btn = QPushButton("搜索")
        self.search_btn.clicked.connect(self.search_data)
        self.search_layout.addWidget(self.search_label)
        self.search_layout.addWidget(self.search_input)
        self.search_layout.addWidget(self.search_column)
        self.search_layout.addWidget(self.search_btn)
        # 添加到主布局
        self.main_layout.addLayout(self.toolbar_layout)
        self.main_layout.addLayout(self.search_layout)
        self.main_layout.addWidget(self.table_view)
        self.central_widget.setLayout(self.main_layout)
        # 添加快捷鍵
        self.shortcut_open = QAction(self)
        self.shortcut_open.setShortcut(QKeySequence("Ctrl+O"))
        self.shortcut_open.triggered.connect(self.open_file)
        self.addAction(self.shortcut_open)
        self.shortcut_save = QAction(self)
        self.shortcut_save.setShortcut(QKeySequence("Ctrl+S"))
        self.shortcut_save.triggered.connect(self.save_file)
        self.addAction(self.shortcut_save)
        # 狀態(tài)欄
        self.statusBar().showMessage("就緒")
    def open_file(self):
        file_path, _ = QFileDialog.getOpenFileName(
            self, "打開Excel文件", "", 
            "Excel Files (*.xlsx *.xls *.csv);;All Files (*)"
        )
        if file_path:
            try:
                # 根據文件擴展名選擇讀取方式
                if file_path.endswith('.csv'):
                    self.df = pd.read_csv(file_path)
                else:
                    self.df = pd.read_excel(file_path)
                self.current_file = file_path
                self.file_label.setText(f"當前文件: {file_path}")
                # 更新搜索列下拉框
                self.search_column.clear()
                self.search_column.addItem("所有列")
                self.search_column.addItems(self.df.columns.tolist())
                # 加載數據到表格
                self.load_data_to_table()
                self.btn_save.setEnabled(True)
                self.btn_save_as.setEnabled(True)
                self.btn_add_row.setEnabled(True)
                self.btn_delete_row.setEnabled(True)
                self.statusBar().showMessage(f"成功加載文件: {file_path}", 3000)
            except Exception as e:
                QMessageBox.critical(self, "錯誤", f"無法打開文件:\n{str(e)}")
                self.statusBar().showMessage(f"打開文件失敗: {str(e)}", 5000)
    def load_data_to_table(self):
        # 清除舊數據
        self.model.clear()
        # 設置表頭
        self.model.setHorizontalHeaderLabels(self.df.columns)
        # 填充數據
        for row in range(self.df.shape[0]):
            row_items = []
            for col in range(self.df.shape[1]):
                value = self.df.iloc[row, col]
                item = QStandardItem(str(value) if not pd.isna(value) else "")
                item.setEditable(True)
                row_items.append(item)
            self.model.appendRow(row_items)
        # 調整列寬
        self.table_view.resizeColumnsToContents()
    def save_file(self):
        if not self.current_file:
            return
        try:
            self.update_data_from_table()
            # 根據文件擴展名選擇保存方式
            if self.current_file.endswith('.csv'):
                self.df.to_csv(self.current_file, index=False)
            else:
                self.df.to_excel(self.current_file, index=False)
            QMessageBox.information(self, "成功", "文件保存成功!")
            self.statusBar().showMessage("文件保存成功", 3000)
        except Exception as e:
            QMessageBox.critical(self, "錯誤", f"保存失敗:\n{str(e)}")
            self.statusBar().showMessage(f"保存失敗: {str(e)}", 5000)
    def save_file_as(self):
        if self.df is None:
            return
        file_path, _ = QFileDialog.getSaveFileName(
            self, "另存為", "", 
            "Excel Files (*.xlsx);;CSV Files (*.csv);;All Files (*)"
        )
        if file_path:
            try:
                self.update_data_from_table()
                if file_path.endswith('.csv'):
                    self.df.to_csv(file_path, index=False)
                else:
                    # 確保擴展名是.xlsx
                    if not file_path.endswith('.xlsx'):
                        file_path += '.xlsx'
                    self.df.to_excel(file_path, index=False)
                self.current_file = file_path
                self.file_label.setText(f"當前文件: {file_path}")
                QMessageBox.information(self, "成功", f"文件已保存到:\n{file_path}")
                self.statusBar().showMessage(f"文件已保存到: {file_path}", 3000)
            except Exception as e:
                QMessageBox.critical(self, "錯誤", f"保存失敗:\n{str(e)}")
                self.statusBar().showMessage(f"保存失敗: {str(e)}", 5000)
    def update_data_from_table(self):
        # 從表格模型獲取數據并更新DataFrame
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        data = []
        for row in range(rows):
            row_data = []
            for col in range(cols):
                item = self.model.item(row, col)
                row_data.append(item.text() if item else "")
            data.append(row_data)
        self.df = pd.DataFrame(data, columns=self.df.columns)
    def add_row(self):
        if self.df is None:
            return
        # 在末尾添加空行
        empty_row = [""] * len(self.df.columns)
        self.model.appendRow([QStandardItem(item) for item in empty_row])
        # 滾動到最后一行
        self.table_view.scrollToBottom()
        self.statusBar().showMessage("已添加新行", 2000)
    def delete_row(self):
        selected = self.table_view.selectionModel().selectedRows()
        if not selected:
            QMessageBox.warning(self, "警告", "請先選擇要刪除的行")
            return
        # 從后往前刪除以避免索引問題
        for index in sorted(selected, reverse=True):
            self.model.removeRow(index.row())
        self.statusBar().showMessage(f"已刪除 {len(selected)} 行", 3000)
    def search_data(self):
        search_text = self.search_input.text().strip().lower()
        if not search_text:
            return
        column = self.search_column.currentText()
        column_idx = -1 if column == "所有列" else self.search_column.currentIndex() - 1
        # 清除之前的高亮
        for row in range(self.model.rowCount()):
            for col in range(self.model.columnCount()):
                item = self.model.item(row, col)
                if item:
                    item.setBackground(Qt.white)
        found = False
        for row in range(self.model.rowCount()):
            for col in range(self.model.columnCount()):
                if column_idx != -1 and col != column_idx:
                    continue
                item = self.model.item(row, col)
                if item and search_text in item.text().lower():
                    item.setBackground(Qt.yellow)
                    found = True
                    # 滾動到第一個匹配項
                    if not found:
                        self.table_view.scrollTo(self.model.index(row, col))
        if found:
            self.statusBar().showMessage(f"找到匹配 '{search_text}' 的內容", 3000)
        else:
            self.statusBar().showMessage(f"未找到匹配 '{search_text}' 的內容", 3000)
    def show_context_menu(self, position):
        if self.df is None:
            return
        menu = QMenu()
        edit_action = QAction("編輯單元格", self)
        edit_action.triggered.connect(self.edit_current_cell)
        menu.addAction(edit_action)
        add_row_action = QAction("添加行", self)
        add_row_action.triggered.connect(self.add_row)
        menu.addAction(add_row_action)
        delete_row_action = QAction("刪除行", self)
        delete_row_action.triggered.connect(self.delete_row)
        menu.addAction(delete_row_action)
        menu.addSeparator()
        copy_action = QAction("復制", self)
        copy_action.triggered.connect(self.copy_selection)
        menu.addAction(copy_action)
        menu.exec_(self.table_view.viewport().mapToGlobal(position))
    def edit_current_cell(self):
        index = self.table_view.currentIndex()
        if not index.isValid():
            return
        old_value = self.model.itemFromIndex(index).text()
        new_value, ok = QInputDialog.getText(
            self, "編輯單元格", 
            f"輸入新值 (原值: {old_value}):", 
            text=old_value
        )
        if ok and new_value != old_value:
            self.model.itemFromIndex(index).setText(new_value)
    def copy_selection(self):
        selected = self.table_view.selectionModel().selectedIndexes()
        if not selected:
            return
        # 獲取選中的最小和最大行列
        min_row = min(index.row() for index in selected)
        max_row = max(index.row() for index in selected)
        min_col = min(index.column() for index in selected)
        max_col = max(index.column() for index in selected)
        # 構建文本
        text = ""
        for row in range(min_row, max_row + 1):
            row_text = []
            for col in range(min_col, max_col + 1):
                index = self.model.index(row, col)
                item = self.model.itemFromIndex(index)
                row_text.append(item.text() if item else "")
            text += "\t".join(row_text) + "\n"
        # 復制到剪貼板
        clipboard = QApplication.clipboard()
        clipboard.setText(text.strip())
        self.statusBar().showMessage("已復制選中內容到剪貼板", 2000)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    editor = ExcelEditor()
    editor.show()
    sys.exit(app.exec_())

功能擴展

  • 數據篩選和排序:添加對表格數據的篩選和排序功能
  • 圖表生成:集成matplotlib,從Excel數據生成圖表
  • 公式支持:實現簡單的Excel公式計算
  • 多工作表支持:處理包含多個工作表的Excel文件
  • 數據驗證:添加輸入數據驗證功能
  • 樣式設置:允許設置單元格字體、顏色、對齊方式等
  • 導入/導出:支持更多格式的導入導出,如JSON、SQL等
  • 宏錄制:實現簡單的操作記錄和回放功能

程序發(fā)布

可以使用PyInstaller將應用打包為獨立可執(zhí)行文件:

pip install pyinstaller
pyinstaller --onefile --windowed excel_editor.py

這將在dist目錄下生成可執(zhí)行文件,可以在沒有Python環(huán)境的電腦上運行。

這個實現提供了一個功能完整的Excel編輯器基礎,您可以根據需要進一步擴展和完善功能。

到此這篇關于Python利用openpyxl/xlrd/xlwt和pandas操作Excel的文章就介紹到這了,更多相關Python操作Excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python打包生成so文件的實現

    python打包生成so文件的實現

    這篇文章主要介紹了python打包生成so文件的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Python異步編程之新舊協程的實現對比

    Python異步編程之新舊協程的實現對比

    Python中新舊協程的實現方式在協程發(fā)展史上有一段交集,并且舊協程基于生成器的協程語法讓生成器和協程兩個概念混淆,所以對學習者會造成一定的困擾,本文主要說明兩種協程的實現方式的差異,需要的可以了解下
    2024-01-01
  • Python輕松實現將Excel數據批量導入數據庫

    Python輕松實現將Excel數據批量導入數據庫

    在日常數據處理工作中,將 Excel 文件內容導入數據庫是一個常見需求,本文將基于輕量級 Excel 處理庫完成 Excel 文件解析,結合 Python 內置的 SQLite 數據庫,實現多工作表自動識別、動態(tài)創(chuàng)建表結構、批量數據入庫的完整方案,希望對大家有所幫助
    2026-04-04
  • python中print()函數的“,”與java中System.out.print()函數中的“+”功能詳解

    python中print()函數的“,”與java中System.out.print()函數中的“+”功能詳解

    python中的print()函數和java中的System.out.print()函數都有著打印字符串的功能。接下來通過本文給大家分享python中print()函數的“,”與java中System.out.print()函數中的“+”功能,需要的朋友參考下吧
    2017-11-11
  • Django中多種重定向方法使用詳解

    Django中多種重定向方法使用詳解

    這篇文章主要介紹了Django中多種重定向方法使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python中多種字符串格式化的完整方法指南

    Python中多種字符串格式化的完整方法指南

    在日常編程中,我們經常需要將各種數據類型轉換為美觀、易讀的字符串形式,Python提供了多種強大的字符串格式化方法,每種方法都有其適用場景,下面我們就來詳細介紹一下吧
    2025-10-10
  • Python中schedule擴展的具體使用

    Python中schedule擴展的具體使用

    Python的schedule模塊是一個輕量級的Python庫,用于在指定時間執(zhí)行某些操作,本文就來介紹一下Python中schedule擴展的具體使用,感興趣的可以了解一下
    2024-12-12
  • 互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)

    互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)

    這篇文章主要介紹了互斥鎖解決 Python 中多線程共享全局變量的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • python實現班級檔案管理系統

    python實現班級檔案管理系統

    這篇文章主要為大家詳細介紹了python實現班級檔案管理系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Django權限系統auth模塊用法解讀

    Django權限系統auth模塊用法解讀

    這篇文章主要介紹了Django權限系統auth模塊用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

邹城市| 泾川县| 长子县| 文化| 乐陵市| 化德县| 黑水县| 固阳县| 长泰县| 邵武市| 威海市| 罗平县| 额济纳旗| 和顺县| 葫芦岛市| 宣城市| 项城市| 滨海县| 牡丹江市| 安达市| 广饶县| 汉寿县| 凯里市| 方城县| 南召县| 泰来县| 阿拉善右旗| 泰宁县| 双鸭山市| 长子县| 高雄县| 新和县| 苏尼特右旗| 青田县| 柏乡县| 大埔县| 平和县| 镶黄旗| 荔波县| 东乌珠穆沁旗| 同心县|