python读写word、excel、csv、json、hive orc文件

本文介绍了如何使用Python读写各种类型的文件,包括Word、Excel、CSV及JSON等。重点讲解了利用不同Python库如win32com、openpyxl、xlrd及标准库函数等进行文件操作的方法。

http://blog.youkuaiyun.com/pipisorry/article/details/50368044

python读写word文档

(include wps)
将word文档转换成txt文档
def doc2txt():
    '''
    将doc文档转换成txt文档
    :return:
    '''
    from win32com import client

    INPUT_DIR = r'C:\Users\pi\Desktop\New folder'
    OUTPUT_DIR = r'C:\Users\pi\Desktop\txts'
    word = client.Dispatch('Word.Application')
    for doc_name in listdir(INPUT_DIR):
        print(doc_name)
        doc_full_name = path.join(INPUT_DIR, doc_name)
        doc = word.Documents.Open(doc_full_name)
        doc.SaveAs(path.join(OUTPUT_DIR, doc_name.split('.')[0]), 4)
        doc.Close()
    word.Quit()
wdFormatDocument                    =  0
wdFormatDocument97                  =  0
wdFormatDocumentDefault             = 16
wdFormatDOSText                     =  4
wdFormatDOSTextLineBreaks           =  5
wdFormatEncodedText                 =  7
wdFormatFilteredHTML                = 10
wdFormatFlatXML                     = 19
wdFormatFlatXMLMacroEnabled         = 20
wdFormatFlatXMLTemplate             = 21
wdFormatFlatXMLTemplateMacroEnabled = 22
wdFormatHTML                        =  8
wdFormatPDF                         = 17
wdFormatRTF                         =  6
wdFormatTemplate                    =  1
wdFormatTemplate97                  =  1
wdFormatText                        =  2
wdFormatTextLineBreaks              =  3
wdFormatUnicodeText                 =  7
wdFormatWebArchive                  =  9
wdFormatXML                         = 11
wdFormatXMLDocument                 = 12
wdFormatXMLDocumentMacroEnabled     = 13
wdFormatXMLTemplate                 = 14
wdFormatXMLTemplateMacroEnabled     = 15
wdFormatXPS                         = 18

照着字面意思应该能对应到相应的文件格式,如果你是office2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML明显比wdFormatHTML要干净许多。

当然你也可以用任意一种语言通过com来调用office API,比如PHP.

[python模块:win32com用法详解]
[python读取word文档]
[Python-docx:读写word文档的Python库]

python读写excel文档

实例

将H列如下修改一下

当然这个可以拷贝到notepad++中,使用替换(\d+\*\d+).*为\1就ok了

Python中读取微软excel的模块

openpyxl
The recommended package for reading and writing Excel 2010 files (ie: .xlsx)
xlrd
This package is for reading data and formatting information from older Excel files (ie: .xls)

安装

pip install openpyxl

基本使用代码实现

def openpyxl_excel(FILENAME=r'C:\Users\pi\Desktop\1.xlsx'):
    '''
    只能操作office 2010+版本文件
    '''
    import openpyxl as xl

    wb = xl.load_workbook(FILENAME)  # 读取excel文件
    ws = wb.get_sheet_by_name(wb.get_sheet_names()[0])  # 选择某个sheet
    pro_spec = [i[0].value for i in ws['H1:H' + str(ws.max_row)]]  # 选择某一列的所有数据
    #  对选中的数据进行操作
    pro_spec = [item[0:item.rfind('*')] if item is not None and item.count('*') == 2 else item for item in pro_spec]
    for index, i in enumerate(ws['H1:H' + str(ws.max_row)]):
        i[0].value = pro_spec[index]  # 将数据修改到excel文件单元格中
    wb.save(FILENAME)  # 保存文件修改
 

Python XLRD Error : formula/tFunc unknown FuncID:186

找到formula.py文件(D:\python3.4.2\Lib\site-packages\xlrd\formula.py)186行左右,在文字184和文字189中间加插入一行
186: ('HACKED', 1, 1, 0x02, 1, 'V', 'V')

[Python XLRD Error : formula/tFunc unknown FuncID:186]

[官网主页homepage]

[python操作excel之xlrd]

微软官方Excel管理Python模块:Pyvot

安装方式

前提是预先安装有Python for Windows extensions (pywin32)和Office 2010。

安装命令是:pip install pyvot

微软官方Excel管理Python模块

导入方式

import xl

把Python内容导入到Excel中

>>> xl.Workbook() # 创建空的Excel表单,状态为active
>>> a = range(1,10) #  一个Python列表
>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> xl.view(a) # 将Python列表展示在Excel中

Python列表被拷贝进了Excel。

Excel内容转成Python对象

从Excel中获取数据需要xl.Range对象,这个对象代表要操作的单元格。xl.view函数返回选择的存储数据的单元格的范围。

>>> r = xl.view(range(1,10))
>>> r<ColumnVector range object for $A$2:$A$1048576 (visible only)
>>>> r.get()[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
>>> sum(r) # ranges are iterable45.0

需要注意的是,view函数实际上选中了整个A列,但是Range.get假设我们只需要里面有用的数据。

现在我们可以修改Excel中的数据,然后重新获取数据回来。例如我们手动在Excel中删除一些行,把Excel中的数据改为这样:

>>> r.get() # get updated values[1.0, 20.0, 8.0, 9.0]

当前的选择范围仍旧是一个Range对象,这允许我们在Excel中筛选我们感兴趣的数据。

>>> xl.selected_range().get()8.0

使用Range对象的注意事项:

  • 它排除了表头行(get("ColumnName").get()不包含"ColumnName")

  • 它只从被使用了的范围里面进行选择。相对应的,原生的Excel COM API有一个非常令人沮丧的问题,就是如果你选择一列,它返回一百万个空的单元格给你。

Workbook.Range方法相比之下只处理A1这种风格的引用,和命名范围。

代码实现

FILENAME = r'C:\Users\pi\Desktop\5-3入库.XlS'


def xl_excel():
    '''
    微软官方xl模块
    '''
    import xl

    book = xl.Workbook(FILENAME)  # 打开文件
    pro_spec = book.get("H:H").get()  # 获得某一列数据
    # 对数据进行操作
    pro_spec = [item[0:item.rfind('*')] if item is not None and item.count('*') == 2 else item for item in pro_spec][1:]
    xl.view(pro_spec, to=book.get("I:I"))  # 将数据写入对应列
[微软官方Excel管理Python模块]

[Getting Started with Pyvot]

不过lz推荐用pandas处理excel数据,毕竟datafram数据结构就和excel表一样。

python读写csv文档

python读取csv文件

with open('stock.tsv') as f:
    f_tsv = csv.reader(f, delimiter='\t')
    for row in f_tsv:
        # Process row

python写csv文件

with open(csv_filename, 'w', encoding='utf-8') as csv_file:
csv_w = csv.writer(csv_file)
        for line_no in line_no_list:
            csv_w.writerow(predict_label_list[label_start_no:label_start_no + line_no])

出现的问题

Python中通过csv的writerow输出的内容有多余的空行
也就是csv.writer().writerow()保存的csv文件,打开时每行后都多一行空行
解决1:
with open(csv_filename, 'w', encoding='utf-8', newline='') as csv_file:
csv_w = csv.writer(csv_file, delimiter=',', lineterminator='\n')
csv方言参数中有一个  lineterminator,他的作用是定义csv结束一行的符号, 默认值是 '\r\n',如果有需要,也可以尝试修改csv.register_dialect(lineterminator='\n',)
解决2:
在open()内增加一个参数newline='' 即可,但是在windows下,换行还是两个\r\n而不是只有\n。
对newline参数的解释:参数newline是用来控制文本模式之下,一行的结束字符。可以是None,’’,\n,\r,\r\n等。当在读取模式下,如果新行符为None,那么就作为通用换行符模式工作,意思就是说当遇到\n,\r或\r\n都可以作为换行标识,并且统一转换为\n作为文本输入的换行符。当设置为空’’时,也是通用换行符模式工作,但不作转换为\n,输入什么样的,就保持原样全输入。当设置为其它相应字符时,就会判断到相应的字符作为换行符,并保持原样输入到文本。当在输出模式时,如果新行符为None,那么所有输出文本都是采用\n作为换行符。如果设置为’’或者\n时,不作任何的替换动作。如果是其它字符,会在字符后面添加\n作为换行符。

解决3:
Python中的csv的writer,打开文件的时候,要通过binary模式去打开,即带b的,比如wb,ab+等
而不能通过文本模式,即不带b的方式,w,w+,a+等,否则,会导致使用writerow写内容到csv中时,产生对于的CR,导致多余的空行。

python读写json文档

[python对象与json ]

python读写hive orc文档

pip install pyorc

示例:# hdfs上读取所有orc文件并转为文本文件

import os
import pyorc

orc_dir = "/data/train_data_d/pt=2013-10-08"
processed_file_path = "/data/train_data_d.csv"

with open(processed_file_path, 'w', encoding='utf-8') as fw:
    cnt = 0
    for file_name in os.listdir(orc_dir):
        if not file_name.endswith('txt'):
            orc_file = os.path.join(orc_dir, file_name)
            print(orc_file)
            with open(orc_file, 'rb') as fr:
                reader = pyorc.Reader(fr)
                # print(str(reader.schema))
                # struct < id: bigint, name: string, ... >
                for row_tuple in reader.read():
                    row_tuple = (str(i) for i in row_tuple)
                    fw.write('\t'.join(row_tuple) + '\n')
                    cnt += 1
    print(f"Process total {cnt} rows !")

from:python读写word、excel、csv、json文件_python word excel读写-优快云博客

ref:数据编码和处理

<think>首先,用户的问题是关于“Orc 本地部署最佳实践指南”。这里的“Orc”可能指的是ORC文件格式,因为引用中提到过“ORC”作为数据格式,比如在引用[1]和[2]中。ORC(Optimized Row Columnar)是一种高效的列式存储格式,常用于大数据处理,如Hadoop生态系统。 用户意图是希望获得在本地部署ORC的推荐方法或指南。所以,我需要提供关于如何在本地环境中部署和使用ORC文件格式的最佳实践。 从系统指令中: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:引用[1]提到Apache Doris对ORC格式的深度适配;引用[2]提到使用云中立的数据格式ORC;引用[3]是关于QuickSight的步骤,可能与ORC相关,但更偏重可视化工具。 我的回答应该: 1. **结构清晰**:逐步解释如何本地部署ORC。 2. **真实可靠**:基于ORC文件格式的标准实践。 3. **引用相关部分**:自然地引用站内内容。 4. **使用中文**。 5. **生成相关问题**:在末尾添加相关问题。 关键点: - ORC文件格式不是需要“部署”的软件;它是一种存储格式。所以,本地部署ORC可能意味着在本地环境中使用ORC格式,比如在Hadoop、Spark或类似工具中。 - 最佳实践包括:如何创建、读取、优化ORC文件,以及相关工具。 步骤: 1. **理解ORC**:解释什么是ORC格式。 2. **本地环境设置**:讨论在本地机器上设置工具来处理ORC文件。 3. **创建ORC文件**:如何生成ORC文件。 4. **读取和查询**:如何在本地查询ORC文件。 5. **优化**:性能优化技巧。 6. **引用站内内容**:自然地融入引用。例如,引用[1]提到Apache Doris支持ORC,可用于查询加速;引用[2]提到使用ORC作为云中立格式。 7. **生成相关问题**:在末尾添加相关问题。 回答大纲: - **引言**:简要介绍ORC格式。 - **步骤**:详细说明本地部署的最佳实践。 - **引用**:在适当位置添加引用。 - **相关问题**:在末尾添加。 相关问题建议: 1. 如何优化ORC文件读写性能? 2. ORC文件格式与其他格式(如Parquet)的比较? 3. 在本地开发环境中使用ORC的常见挑战? 确保数学表达式正确:如果提到任何数学内容,如公式,使用$...$或$$...$$。但ORC部署可能不涉及太多数学,所以可能不需要。 最终输出: - 回答部分。 - 相关问题部分。</think>### ORC 本地部署最佳实践指南 ORC(Optimized Row Columnar)是一种高效的列式存储格式,专为大数据处理设计,支持压缩、索引和谓词下推等特性,能显著提升查询性能。在本地部署 ORC 时,核心目标是实现高效的数据存储和查询,同时确保与本地计算引擎(如 Apache Spark 或 Hadoop)的集成。以下指南基于行业最佳实践,结合本地环境特点,逐步介绍部署步骤和优化技巧。参考引用内容,ORC 作为云中立的数据格式(如引用[2]所述),在本地部署中可借助缓存策略和查询引擎实现高性能分析[^1]。 #### 1. **理解 ORC 格式和本地环境准备** - **ORC 简介**:ORC 文件格式数据按列存储,支持 ACID 事务、复杂数据类型(如嵌套结构),并提供内置压缩(如 Zlib 或 Snappy)。其优势在于减少 I/O 开销和加速查询。 - **本地环境设置**: - **硬件要求**:推荐使用多核 CPU、SSD 存储和至少 8GB RAM,以处理大数据集。 - **软件依赖**:安装以下工具: - **Java 环境**:ORC 依赖于 Java,安装 JDK 8+(如 OpenJDK)。 - **计算引擎**:选择 Apache Spark(推荐 Spark 3.x)或 Hadoop,用于读写 ORC 文件。例如,在 Spark 中,ORC 支持原生集成。 - **开发工具**:使用 Python(PySpark)或 Scala 进行脚本开发,或直接使用命令行工具(如 `hive` 或 `spark-sql`)。 - 示例:在本地安装 Spark: ```bash # 下载并解压 Spark wget https://archive.apache.org/dist/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz tar -xzvf spark-3.3.1-bin-hadoop3.tgz export SPARK_HOME=/path/to/spark-3.3.1-bin-hadoop3 export PATH=$PATH:$SPARK_HOME/bin ``` #### 2. **创建和写入 ORC 文件** - **数据准备**:将源数据(如 CSVJSON)转换为 ORC 格式。最佳实践包括: - **模式定义**:明确数据模式(schema),以利用 ORC 的类型优化。例如,使用 Spark 定义 DataFrame 模式。 - **写入过程**:使用计算引擎写入 ORC 文件,避免直接手动操作。示例代码(PySpark): ```python from pyspark.sql import SparkSession # 初始化 Spark 会话 spark = SparkSession.builder.appName("ORCWrite").getOrCreate() # 读取 CSV 数据(示例) df = spark.read.csv("input.csv", header=True, inferSchema=True) # 写入 ORC 文件(本地路径) df.write.orc("file:///path/to/local/output.orc") # 关闭会话 spark.stop() ``` - **优化技巧**: - **压缩设置**:在写入时指定压缩算法(如 `.option("compression", "snappy")`),减少存储空间。 - **分区**:对大表进行分区(如按日期),提升查询效率。例如,`df.write.partitionBy("date").orc("output.orc")`。 #### 3. **读取和查询 ORC 文件** - **基本读取**:使用计算引擎加载 ORC 文件进行查询。ORC 的列式存储支持谓词下推(predicate pushdown),能过滤不必要的数据扫描。 - 示例查询(Spark SQL): ```sql -- 在 Spark SQL shell 中 CREATE TABLE local_orc_table USING ORC LOCATION 'file:///path/to/local/output.orc'; SELECT * FROM local_orc_table WHERE column > 100; ``` - **性能优化**: - **缓存策略**:在内存中缓存频繁访问的数据(如 Spark 的 `persist()` 方法),减少磁盘 I/O。参考引用[1],Apache Doris 的缓存机制可借鉴:在本地部署中,结合物化视图实现查询加速[^1]。 - **索引利用**:ORC 内置行组索引(row group index),在查询时自动使用。确保写入时启用索引(如 Spark 的 `.option("orc.create.index", "true")`)。 - **本地查询引擎**:对于简单查询,可使用轻量级工具如 Apache Arrow 或 PyArrow(Python 库),避免启动完整集群。示例: ```python import pyarrow.orc as orc # 读取本地 ORC 文件 reader = orc.ORCFile("/path/to/local/output.orc") table = reader.read() print(table.to_pandas()) # 转换为 Pandas DataFrame 进行查询 ``` #### 4. **部署优化和最佳实践** - **存储管理**: - **本地路径**:使用绝对路径(如 `file:///` 前缀),避免权限问题。推荐将 ORC 文件存储在 SSD 上以提升 I/O 速度。 - **数据治理**:实施版本控制和备份策略(如 Git LFS 或定期快照),防止数据损坏。参考引用[2],在本地部署中采用统一数据访问层(如 Alluxio)可简化存储与计算分离[^2]。 - **性能调优**: - **内存配置**:调整 JVM 堆大小(如 Spark 的 `spark.driver.memory`),避免 OOM 错误。 - **并发控制**:限制并行任务数(如 Spark 的 `spark.sql.shuffle.partitions`),匹配本地 CPU 核心数。 - **监控工具**:使用 JVisualVM 或 Spark UI 监控资源使用,识别瓶颈。 - **安全与可维护性**: - **权限设置**:在本地文件系统上设置读写权限(如 Linux 的 `chmod`),确保安全。 - **容器化部署**:使用 Docker 封装环境,提高可移植性。参考引用[2],容器化技术是云中立的最佳实践[^2]。示例 Dockerfile: ```dockerfile FROM openjdk:11 RUN apt-get update && apt-get install -y wget RUN wget https://archive.apache.org/dist/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz && tar -xzvf spark-3.3.1-bin-hadoop3.tgz ENV SPARK_HOME=/spark-3.3.1-bin-hadoop3 ENV PATH=$PATH:$SPARK_HOME/bin ``` #### 5. **常见挑战与解决方案** - **挑战 1:小文件问题**—写入大量小文件会降低性能。解决方案:合并文件(如 Spark 的 `coalesce()`)或设置最小文件大小。 - **挑战 2:兼容性问题**—ORC 版本与计算引擎不匹配。解决方案:使用稳定版本(如 ORC 1.6+ 与 Spark 3.x),并测试升级路径。 - **挑战 3:查询延迟**—本地资源有限。解决方案:结合物化视图预计算聚合数据,类似引用[1]中的查询加速方法[^1]。 通过以上步骤,您可以在本地高效部署 ORC 格式,实现数据的高吞吐和低延迟分析。如需扩展,可集成 Apache Doris 等分布式引擎进行湖仓查询加速[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值