質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

Pythonで文字化けしているCSVファイルの文字コード変換が上手くいかない

M.hosokawa
M.H

総合スコア19

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

123閲覧

投稿2022/06/23 15:29

実現したいこと

CSVファイルを文字化けすることなく、必要分だけ結合したい

起きている現象

アメリカのwebサイトからダウンロードしたCSVファイル(そもそも日本語が文字化けしている)の読み込み、ファイル結合する時に文字コードの変換が上手くいっておりません。
ファイル結合前と後で文字化けしている日本語が変換されているため、エンコード自体は行われていると思うのですが、完全には直っていない状態です。

試したこと

python 文字コード 変換 CSVで調べて出てくる記事で試されていることを一通りやってみたのですが、
どれも結果は変わりませんでした。

また、こちらの記事で文字コードの正規化を行う必要もあるかもしれないということで、こちらも試したのですが結果は変わりませんでした。

特にエラーは出ないのですが文字コードの変換だけが上手くいっておらず、正直なところどこに原因があるのかわかりません。
そもそもCSVファイルが文字化けしている所から始まっているため、そのファイルが原因の可能性もあるかと思うのですが、対処方法がわかりません。

お聞きしたいこと

このような現象が起きている原因は何なのでしょうか?
ファイルに問題ありなのか、コードに問題があるのか、それともまた別の問題か、ご教示いただけますと幸いです。

python

#実装コード #必要なモジュールをインポート import glob import pandas as pd import codecs as cd import chardet import unicodedata from pathlib import Path #UTF-8、Shift-JISディレクトリへのパス path_u = Path("C:\\test\\UTF-8") path_s= Path("C:\\test\\Shift-JIS") #それぞれのディレクトリで「.csv」が入っている名前のファイルを取得 ufiles = list (path_u.glob("*.csv")) sfiles = list (path_s.glob("*.csv")) #UTF-8とShift-JISフォルダの同名ファイルを辞書形式のペアデータとする files_dict = dict(zip(ufiles,sfiles)) #UTF-8ディレクトリ内のCSVファイルの中身をShift-JISディレクトリ内の同名ファイルに書き込み変換。 #複数ファイルにも対応するようにfor文で書く。cp932=Shift-JIS。replaceはエラーとなった文字を?に置き換え。 for ufile,sfile in files_dict.items():#.items()は辞書形式のデータでfor文をまわす際によく利用します。 with open(ufile, encoding='utf-8',errors='replace') as fin: with open(sfile, 'w', encoding='utf-8',errors='replace') as fout: fout.write(fin.read()) # 読み込んだファイルを入れるリストを準備 lists = [] # フォルダ、ファイルの種類を指定 folder = 'C:\\test1\\*.csv' # #結合後のExcelファイル名を指定 excel_file_name='C:\\test1\\merge.csv' #1 フォルダ内のファイル一覧を読み込み file_list=glob.glob(folder) #2 リストにファイルを保存 for i in file_list: with cd.open(i, "r", "utf-8", errors='replace') as file: lists.append(pd.read_csv(file, encoding='utf-8')) #3 リスト内のExcelをマージ merge_data = pd.concat(lists) #4 マージしたデータをExcelへ書き込み merge_data.to_csv(excel_file_name,index=0)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

meg_

2022/06/23 15:54

> アメリカのwebサイトからダウンロードしたCSVファイル そのファイルの文字コードが分からないということでしょうか?
otn

2022/06/23 17:32

掲載されているプログラムだと、エンコーディング変換をせずにコピーしているだけですが、プログラムのコピペミスでしょうか?
otn

2022/06/23 17:33 編集

> ファイルに問題ありなのか、コードに問題があるのか、 ファイルのエンコーディングに合わせたプログラムになっていないと言うことでしょうとしか言い様がないです。
jbpb0

2022/06/23 22:36

もし差し支えなければ、 > アメリカのwebサイトからダウンロードしたCSVファイル をダウンロードする方法を教えてください
quickquip

2022/06/23 23:50

> そもそも日本語が文字化けしている 文字化けと認識しているということは、正しい内容が分かっているということになりますか。 現状が「この様な文字が入っているはずだと知っている」だけなのか「ある手順で作業して正しい内容だと確認できている」のかで話が全然違います。(もちろん回答するべき内容も) 「日本語が文字化けしている」と認識した経緯が書かれていない限り、コードが正しいことをやっているのかを第三者に判定することはてきません。
TakaiY

2022/06/24 01:31

そもそも根本的な問題として、まずは入手したCSVファイルを、複数の文字コードに対応している(最近のものなら大抵OK)テキストエディタで開き、そのCSVファイルの日本語文字コードを調べるべきでしょう。 そのCSVファイルの文字コードは何ですか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。