69826


Pandasで複数のファイルを結合したいと考えております。  
下記手順で進めましたが、エラーが出ており、ヘルプいただきたくお願いします。  
使用環境はWindows 10、miniconda、jupyterlabになります。

まず下記のコードでファイルが実際認識されているか確認しました。

**実行したコード:**

[code]

    import os
    path = r'C:\Users\？？？\anaconda\？？？\001urishi;souasa\jyuretsu' 
    os.listdir(path)
    
[/code]

**出力結果:**

[code]

    ['2012USINPCSV_10249667.csv',
     '2013USINPCSV_10249668.csv',
     '2014USINPCSV_10249669.csv',
     '2015USINPCSV_10249670.csv',
     '2016USINPCSV_10249671.csv',
     '2017USINPCSV_10249672.csv',
     '2018USINPCSV_10249673.csv',
     '2019USINPCSV_10249674.csv',
     '202001-07USINPCSV_10249675']
    
[/code]

次にコードを以下の様に変更したところ、としたところ、  
`DATA_PATH = r'C:\Users\？？？\anaconda\？？？\001urishi;souasa\`  
フォルダの内容が表示されておりました。

[code]

    # -*- coding: CP932 -*-
    import os
    import glob
    import csv
    import pandas as pd
    
    DATA_PATH = r'C:\Users\？？？\anaconda\？？？\001urishi;souasa\jyuretsu' 
    
    All_Files = glob.glob('*.csv'.format(DATA_PATH)) #All_Filesの内容確認
    print (All_Files)
    
[/code]

しかし実際にやりたいことは、1階層下のファイルを読み込むことです。  
そこで最終的には以下のコードにしたところ、エラーが発生しました。

**問題のコード:**

[code]

    # -*- coding: CP932 -*-
    import os
    import glob
    import csv
    import pandas as pd
    
    DATA_PATH = r'C:\Users\？？？\anaconda\？？？\001urishi;souasa\jyuretsu\'
    All_Files = glob.glob('*.csv'.format(DATA_PATH)) #All_Filesの内容確認
    print (All_Files)
    
[/code]

**エラーメッセージ:**

[code]

    SyntaxError: EOL while scanning string literal
    
[/code]

あちらを直せば、こちらがエラー。Python挫折寸前です…


CC BY-SA 4.0
2020-08-22T14:30:53.367
69777
2020-08-24T11:59:26.893
2020-08-23T16:19:14.587
3060
question
python pandas
Pandasで複数ファイルの結合時にエラー "ValueError: No objects to concatenate"


ちなみに結構な量で質問内容を編集しているようですが、あまり変えすぎると付いたコメント等と合わなくなりますので、そういう場合は新規に質問を立てた方が良いでしょう。

@Fumu 7さんコメントにUpvoteが付いているのと、その後に大幅編集が行われているので、何かしら状況の進展があったものと思われます。  
しかしそういう意味では質問タイトルや冒頭の「Pandasで複数のファイルを結合...」のpandasを使う所まではまだ届いていない状況ですね。

そのため解決済みかもしれませんが、編集された質問内容に対して以下に回答します。

* * *

`SyntaxError: EOL while scanning string
literal`のエラーが発生しているのは、raw文字列(`r'xxx'`)の最後が`\`になっているからです。

こちらの記事 [raw文字列の利用](https://www.javadrive.jp/python/string/index4.html) の
[raw文字列を使用する場合の注意点](https://www.javadrive.jp/python/string/index4.html#section2)
を参照。

> もう 1 つの注意点として raw 文字列では ¥" や ¥' が特別な意味を持つため、 raw 文字列の一番最後に ¥
> 記号を記述するとエラーとなります。
>
> 文字列の最後の ¥" の部分が " のエスケープとして処理されてしまうため、文字列が閉じていないと判定されてしまうためです。  
>  もし raw 文字列で、文字列の最後に ¥ を記述したい場合には、 ¥ だけを通常の文字列として記述して連結するようにしてください。

上記を適用すれば、該当行は以下のようになるでしょう。

[code]

    DATA_PATH = r'C:\Users\？？？\anaconda\？？？\001urishi;souasa\jyuretsu' + '\\'
    
[/code]

* * *

それから編集時のミスと思われますが、その次の行のパス+ワイルドカードファイル名結合処理が動作しなくなっています。

[code]

    All_Files = glob.glob('*.csv'.format(DATA_PATH)) #All_Filesの内容確認
    
[/code]

@Fumu 7さんコメントには記述されているし、編集前の質問記事にはあったと思われるので単なる編集ミスでしょう。  
参考：[書式指定例](https://docs.python.org/ja/3/library/string.html?highlight=str%20format#format-
examples)  
以下のように`*`の前が`{}`で始まるのが正しいですね。

[code]

    All_Files = glob.glob('{}*.csv'.format(DATA_PATH)) #All_Filesの内容確認
    
[/code]

* * *

「あちらを直せば、こちらがエラー。」については、質問記事の範囲で見ると以下の可能性が考えられます。

  * ファイル名拡張子  
名前を変えて全角文字を無くした'202001-07USINPCSV_10249675'に拡張子の`.csv`が付いていないようです。

  * encoding指定  
スクリプトの先頭に`# -*- coding: CP932
-*-`を入れて状況が改善したようですが、今は良いかもしれませんが徐々にUTF-8データが増えるでしょうし、実際に色々なパッケージ/モジュールを使ったり、色々な文字列処理が増えると不具合が発生する可能性があります。使っているファイルのデータ内容(encoding含む)が何かを把握して細かく指定した方が良いでしょう。  
その関係で、ソースのパス途中に`？？？`が使われているのは、ユーザー名やフォルダ名に(CP932の?)全角文字が使われているからでは？  
@Fumu 7さんコメントのように、ファイル名(やパス名)の全角文字は思わぬトラブルの原因になり得るので、どちらも使わないで済むように工夫しましょう。


CC BY-SA 4.0
2020-08-24T11:59:26.893
69826
2020-08-24T11:59:26.893
26370
69777
answer