実現したいこと
CSVファイルを文字化けすることなく、必要分だけ結合したい
起きている現象
アメリカのwebサイトからダウンロードしたCSVファイル(そもそも日本語が文字化けしている)の読み込み、ファイル結合する時に文字コードの変換が上手くいっておりません。
ファイル結合前と後で文字化けしている日本語が変換されているため、エンコード自体は行われていると思うのですが、完全には直っていない状態です。
試したこと
python 文字コード 変換 CSVで調べて出てくる記事で試されていることを一通りやってみたのですが、
どれも結果は変わりませんでした。
また、こちらの記事で文字コードの正規化を行う必要もあるかもしれないということで、こちらも試したのですが結果は変わりませんでした。
特にエラーは出ないのですが文字コードの変換だけが上手くいっておらず、正直なところどこに原因があるのかわかりません。
そもそもCSVファイルが文字化けしている所から始まっているため、そのファイルが原因の可能性もあるかと思うのですが、対処方法がわかりません。
お聞きしたいこと
このような現象が起きている原因は何なのでしょうか?
ファイルに問題ありなのか、コードに問題があるのか、それともまた別の問題か、ご教示いただけますと幸いです。
python
1#実装コード 2#必要なモジュールをインポート 3import glob 4import pandas as pd 5import codecs as cd 6import chardet 7import unicodedata 8from pathlib import Path 9 10#UTF-8、Shift-JISディレクトリへのパス 11path_u = Path("C:\\test\\UTF-8") 12path_s= Path("C:\\test\\Shift-JIS") 13 14#それぞれのディレクトリで「.csv」が入っている名前のファイルを取得 15ufiles = list (path_u.glob("*.csv")) 16sfiles = list (path_s.glob("*.csv")) 17 18#UTF-8とShift-JISフォルダの同名ファイルを辞書形式のペアデータとする 19files_dict = dict(zip(ufiles,sfiles)) 20 21#UTF-8ディレクトリ内のCSVファイルの中身をShift-JISディレクトリ内の同名ファイルに書き込み変換。 22#複数ファイルにも対応するようにfor文で書く。cp932=Shift-JIS。replaceはエラーとなった文字を?に置き換え。 23for ufile,sfile in files_dict.items():#.items()は辞書形式のデータでfor文をまわす際によく利用します。 24 with open(ufile, encoding='utf-8',errors='replace') as fin: 25 with open(sfile, 'w', encoding='utf-8',errors='replace') as fout: 26 fout.write(fin.read()) 27 28# 読み込んだファイルを入れるリストを準備 29lists = [] 30 31# フォルダ、ファイルの種類を指定 32folder = 'C:\\test1\\*.csv' 33 34# #結合後のExcelファイル名を指定 35excel_file_name='C:\\test1\\merge.csv' 36 37#1 フォルダ内のファイル一覧を読み込み 38file_list=glob.glob(folder) 39 40 #2 リストにファイルを保存 41for i in file_list: 42 with cd.open(i, "r", "utf-8", errors='replace') as file: 43 lists.append(pd.read_csv(file, encoding='utf-8')) 44 45#3 リスト内のExcelをマージ 46merge_data = pd.concat(lists) 47 48#4 マージしたデータをExcelへ書き込み 49merge_data.to_csv(excel_file_name,index=0)
