http://blog.csdn.net/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 = 0wdFormatDocument97 = 0wdFormatDocumentDefault = 16wdFormatDOSText = 4wdFormatDOSTextLineBreaks = 5wdFormatEncodedText = 7wdFormatFilteredHTML = 10wdFormatFlatXML = 19wdFormatFlatXMLMacroEnab led = 20wdFormatFlatXMLTemplate = 21wdFormatFlatXMLTemplateM acroEnabled = 22wdFormatHTML = 8wdFormatPDF = 17wdFormatRTF = 6wdFormatTemplate = 1wdFormatTemplate97 = 1wdFormatText = 2wdFormatTextLineBreaks = 3wdFormatUnicodeText = 7wdFormatWebArchive = 9wdFormatXML = 11wdFormatXMLDocument = 12wdFormatXMLDocumentMacro Enabled = 13wdFormatXMLTemplate = 14wdFormatXMLTemplateMacro Enabled = 15wdFormatXPS = 18
照着字面意思应该能对应到相应的文件格式,如果你是office2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML明显比wdFormatHTML要干净许多。
当然你也可以用任意一种语言通过com来调用office API,比如PHP.
[python读取word文档]
[Python-docx:读写word文档的Python库] 皮皮blog
python读写excel文档
实例
将H列如下修改一下
当然这个可以拷贝到notepad++中,使用替换(\d+\*\d+).*为\1就ok了
Python中读取微软excel的模块
openpyxlThe 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]
微软官方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模块]
不过lz推荐用pandas处理excel数据,毕竟datafram数据结构就和excel表一样。
皮皮blogpython读写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作为换行符。
[Python3使用csv模块csv.writer().writerow()保存csv文件,产生空行的问题] 解决3: Python中的csv的writer,打开文件的时候,要通过binary模式去打开,即带b的,比如wb,ab+等
而不能通过文本模式,即不带b的方式,w,w+,a+等,否则,会导致使用writerow写内容到csv中时,产生对于的CR,导致多余的空行。
[Python中通过csv的writerow输出的内容有多余的空行] [CSV 文件的读写]
python读写json文档
from: http://blog.csdn.net/pipisorry/article/details/50368044ref:数据编码和处理