2016-04-06 16 views
-2

は、次のスクリプトは、行の構文エラーを示す "オープンで..." をPython。 CSVを使用してファイルを読み取ります。構文エラー

#!/usr/bin/python 

import fileinput; 
import csv; 

def read_csv_file (file_name): 

    with open('file.csv', 'r') as my_csv_file: 
     reader = csv.reader(my_csv_file) 
      for row in reader: 
       print (row) 

read_csv_file(); 
+2

インポートステートメントは、インデントされるか、関数から移動する必要があります。インデントは、Pythonで構文的に重要です。一般的に、import文は関数内にあるべきではありません。ファイルの先頭にあるはずです。 –

+0

あなたの例文は、構文エラーにする前に 'import csv'で字下げエラーがあります。 '<= SYNTAX ERROR'をコメントに入れるなど、エラーを示す実行可能な例に更新してください。私たちは、あなたが走っているものを正確に実行したい。 – tdelaney

+0

"import csv"ステートメントを削除しました。構文エラーです。 – oradbanj

答えて

2

あなたのコード:

with open('file.csv', 'r') as my_csv_file: 
    reader = csv.reader(my_csv_file) 
     for row in reader: 
      print (row) 

が間違ってインデントを持っています。それは次のようになります。

with open('file.csv') as my_csv_file: # the 'r' mode is implicit 
    reader = csv.reader(my_csv_file) 
    for row in reader: # this line shouldn't have been indented 
     print(row) 

また、#!/usr/bin/pythonは、Python 2でスクリプトを実行しますが、ないのPython 3.お使いのシステムはwithを認識しないのPython 2(2.4または以前)の非常に古いバージョンを持っていることコンテキストマネージャ。 のシバンが必要な場合は、#!/usr/bin/env python3.5などのようにしてください。または、スクリプトを実行可能ファイルとして設定し、それを./scriptname.pyなどで実行する予定がない場合は、完全に削除してください。

もう1つ - モジュールと競合するので、ファイル名をcsv.pyにしないでください。システム上のモジュールの後にファイル名を付けないでください。たとえば、csv_test.pyがより良い代替手段になります。

+0

には2つのエラーがありました。シバンは古いバージョンのPython(2.x)を間違って指していました。しかしもっと興味深いのは、ファイル自体の名前がエラーを引き起こしていたということです。ファイルの名前をcsv.pyから "csv_test.py"に変更すると、期待どおりに機能しました。完全な$ ./csv.py トレースバック(最新の最後の呼び出し): ファイル "./csv.py"、行3、にインポートcsv ファイル "csv。、 リーダーで線6、= csv.reader(my_csv_file) はAttributeError「PY:モジュール 'CSV' はない属性を持っていない 'リーダー' $ MV csv.py ./csv_test.py $ ./csv_test.py [ 'first_name \ tlast_name'] – oradbanj

関連する問題