1. ホーム
  2. Python

python で word, excel, csv, json ファイルの読み書きをする。

2022-02-07 03:23:24

http:// blog.csdn.net/pipisorry/article/details/50368044

<スパン python による word 文書の読み出しと書き込み

<スパン (wpsを含む)
<スパン ワード文書からtxt文書への変換
def doc2txt():
    '''
    Convert doc document to txt document
    :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)
        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
wdFormatDOSTextLineBreak


s = 5
wdFormatEncodedText = 7
wdFormatFilteredHTML = 10
wdFormatFlatXML = 19
wdFormatFlatXMLMacroEnab


led = 20
wdFormatFlatXMLTemplate = 21
wdFormatFlatXMLTemplateM


acroEnabled = 22
wdFormatHTML = 8
wdFormatPDF = 17
wdFormatRTF = 6
wdFormatTemplate = 1
wdFormatTemplate97 = 1
wdFormatText = 2
wdFormatTextLineBreaks = 3
wdFormatUnicodeText = 7
wdFormatWebArchive = 9
wdFormatXML = 11
wdFormatXMLDocument = 12
wdFormatXMLDocumentMacro


Enabled = 13
wdFormatXMLTemplate = 14
wdFormatXMLTemplateMacro


Enabled = 15
wdFormatXPS = 18


def openpyxl_excel(FILENAME=r'C:\Users\pi\Desktop\1.xlsx'):
    '''
    Can only manipulate office 2010+ version files
    '''
    import openpyxl as xl

    wb = xl.load_workbook(FILENAME) # read excel file
    ws = wb.get_sheet_by_name(wb.get_sheet_names()[0]) # select a sheet
    pro_spec = [i[0].value for i in ws['H1:H' + str(ws.max_row)]] # select all data in a particular column
    # Operate on the selected data
    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] # modify the data into the excel file cells
    wb.save(FILENAME) # save file changes





>>> xl.Workbook() # Create an empty Excel form with status active

>>> a = range(1,10) # A Python list

>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> xl.view(a) # Display the Python list in Excel



>>> 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



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



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



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


def xl_excel():
    '''
    Microsoft official xl module
    '''
    import xl

    book = xl.Workbook(FILENAME) # open file
    pro_spec = book.get("H:H").get() # Get a column of data
    # Operate on the data
    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")) # Write the data to the corresponding column

文字通り、対応するファイル形式に対応できるはずですが、office2003の場合、それほど多くの形式をサポートしていない可能性があります。ワードファイルからhtmlへの変換は、wdFormatHTML、wdFormatFilteredHTML(8番、10番に対応)の2つの形式がありますが、違いは、wdFormatHTML形式であれば、wdFormatHTML形式が使用されるということです。を使用した場合、ワードファイルには数式などのオレモノがwmf形式で格納されますが、wdFormatFilteredHTMLを使用した場合、数式画像はgif形式で格納され、視覚的にもwdFormatHTMLと比較して明らかにきれいに生成されたHTMLであることが確認できると思います。

いつ ただし、PHP などの com を介して、任意の言語で office API を呼び出すことも可能です。

Python モジュール:win32com 使用法の詳細 ]
[ python read word document ]
[ Python-docx: ワードドキュメントの読み書きのためのPythonライブラリ ]
ピッピブログ

python による Excel 文書の読み書き

インスタンス

H列を以下のように変更します。

もちろん、これをメモ帳++にコピーして、(˶‾᷄ -̫̫ ‾᷅˵) 置き換えることもできます。* for \1 and you're good to go!

PythonでMicrosoft Excelを読むためのモジュール

openpyxl
Excel 2010 のファイル (すなわち .xlsx) を読み書きするための推奨パッケージです。
xlrd
このパッケージは、古い Excel ファイル (例: .xls) からデータを読み込んで情報をフォーマットするためのものです。

インストール方法

pip install openpyxl

基本的な使用方法のコード実装

def openpyxl_excel(FILENAME=r'C:\Users\pi\Desktop\1.xlsx'):
    '''
    Can only manipulate office 2010+ version files
    '''
    import openpyxl as xl

    wb = xl.load_workbook(FILENAME) # read excel file
    ws = wb.get_sheet_by_name(wb.get_sheet_names()[0]) # select a sheet
    pro_spec = [i[0].value for i in ws['H1:H' + str(ws.max_row)]] # select all data in a particular column
    # Operate on the selected data
    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] # modify the data into the excel file cells
    wb.save(FILENAME) # save file changes


Python XLRD Error : formula/tFunc unknown FuncID:186

formula.pyファイル(D: \python3.4.2Libsite-packages↵xlrd)の186行目付近を探して、テキスト184とテキスト189の間に行を挿入してください。
186: ('HACKED', 1, 1, 0x02, 1, 'V', 'V')

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

[公式サイトトップページ ホームページ ]

[ エクセルの xlrd の python 操作 ]


Microsoftの公式Excel管理Pythonモジュールです。Pyvot

<スパン 実装方法


前提条件として、プリインストールされている Windows用Python拡張モジュール(pywin32) とOffice 2010を使用します。

インストールコマンドは、pip install pyvot です。

マイクロソフト社製公式Excel管理Pythonモジュール

<スパン インポート方法

インポート xl

Pythonの内容をExcelに取り込む

<ブロッククオート
>>> xl.Workbook() # Create an empty Excel form with status active

>>> a = range(1,10) # A Python list

>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> xl.view(a) # Display the Python list in 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

ビュー関数は実際には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には、列を選択すると100万個の空のセルが返されるという非常にもどかしい問題があります。

これに対して、Workbook.Rangeメソッドは、スタイルA1の参照と、名前付き範囲のみを扱います。

コードの実装

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


def xl_excel():
    '''
    Microsoft official xl module
    '''
    import xl

    book = xl.Workbook(FILENAME) # open file
    pro_spec = book.get("H:H").get() # Get a column of data
    # Operate on the data
    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")) # Write the data to the corresponding column

[ Microsoft公式Excel管理Pythonモジュール ]

[ Pyvot入門 ]

しかし、lzはExcelのデータにはpandasを使うことを推奨しています。結局、dataframのデータ構造はExcelシートのようなものだからです。



python による csv 文書の読み書き

python が csv ファイルを読み込む

open('stock.tsv') を f とした場合。
    f_tsv = csv.reader(f, delimiter='\t')
    for row in f_tsv:
        # 行を処理する

python write csv ファイル

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])

発生する問題

csvのwriterowを使ったPython出力に余分な空白行がある。
つまり、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のdialectパラメータにlineterminatorがあり、csvの行末の記号を定義しています。デフォルト値は' \n' ですが、必要に応じて、csv.register_dialect(lineterminator=' \n',)を修正してみてください。
解決策2.
open()の中にnewline=''というパラメータを追加するとうまくいくのですが、Windowsの場合、改行が "week "ではなく、"week "のままになってしまうのです。
newlineパラメータの説明です。newlineパラメータは、テキストモードにおける行の終了文字を制御するために使用されます。None、''、 \n、 \r、 \rn などの指定ができます。読み込みモードでは、改行文字がNoneの場合、汎用改行モードとして動作します。つまり、テキスト入力で、 \n, \r, \rın に出会うと、それらを改行マーカーとして使用し、一斉に改行文字である \n に変換することが可能です。空の''に設定すると、汎用改行モードでも動作しますが、''に変換せず、どのような入力でも、元のフル入力を保持します。対応する他の文字に設定すると、対応する文字を改行と判断し、テキストと同じ入力を保持します。出力モードでは、改行文字がNoneの場合、すべての出力テキストは、改行文字として "en "を使用します。'' または \n に設定された場合、置換動作は行われません。それ以外の文字であれば、その文字の後に改行文字として \n が追加されます。
[ Python3 は csv モジュールの csv.writer().writerow() を使って csv ファイルを保存するため、空行を生成します。 ]
解決策3.
Pythonのcsv用ライターで、ファイルを開くときに、バイナリモード、つまり、wb、ab+などのようにbを使ったモードにします。
そして、テキストモード、つまり、bのない、w,w+,a+などのモードは通せません。そうしないと、writerowを使ってcsvにコンテンツを書き込むときにCRになってしまい、余計な空白行が発生してしまうからです。
[ csv の writerow による Python 出力は余分な空行がある ]
[ CSVファイルの読み出しと書き込み ]

Python による json ドキュメントの読み書き

[ pythonオブジェクトとjson ]

からです。 http://blog.csdn.net/pipisorry/article/details/50368044

を参照してください。 データのエンコードと処理