0

会社のすべてのデータをリスト付きの CSV フォルダーとして含むファイルを作成しました。

フォルダーは、列として名前、年齢、入社年、退職年を読み取り、次のようになります。

Name, Age, Join Year, Exit Year
Mark , 19 , 2001      na 
Mike,  30 , 2000      na

2000 年に始まったすべての人を隔離しようとしています。これまでのところ、私のコードは読み取ります

import csv

with open('Confidential.csv', 'rU') as input: 
    dL= list(csv.reader(input))
    sL = dL
    print sL[2]

そして、これはすべてのマイクデータを出力します。これはdL.

私が知りたいのは、2000 年以降の全員を表示する簡単な方法があることです。2000 年に開始した人を検索するために記述できるコードがあり、そうであれば、それらの人々の行にデータを表示できます。

すなわち

if raw_input = 2000
find all 2000 
print line data for any  line that contains 2000?
Like mike, 30, 2000, na because that matches 2000 :)

これは可能ですか、それとも元のコードに固執し、各人の行番号を個別に入力する方が良いですか?

4

4 に答える 4

1

データに対してさらにクエリを実行する予定がある場合は、データベースに変換することをお勧めします。

sqlitePython は、サーバーを必要とせず、単純なファイルから実行されるデータベースである と互換性があります。高度な機能を備えた CSV のようなものと考えることができます。

したがって、ここにSQliteの方法があります:

import csv
import sqlite3  # This imports the drivers for sqlite that come with Python

database_file = 'employees.db'
conn = sqlite3.connect(database_file)  # Creates a new database, or
                                       # opens a connection to the file
                                       # if it already exists

cur = conn.cursor()  #  A cursor, that we use to execute queries

q = "CREATE TABLE IF NOT EXISTS Employees (Name, Age, JoinYear, ExitYear);"
cur.execute(q)  # Creates a new Employees table if it doesn't exist

with open('Confidential.csv', 'rb') as f:
    reader = csv.DictReader(f)
    for row in reader:
        q = """INSERT INTO Employees
                  (Name, Age, JoinYear, ExitYear)
               VALUES (?,?,?,?);"""
        cur.execute(q,row)
        conn.commit()

# Now we can do stuff like this

q = "SELECT * FROM Employees WHERE JoinYear = 2000;"
for result in cur.execute(q):
    print("{} {} {} {}".format(*result)

それだけでなく、30 歳未満のすべての従業員を調べたいとします。

q = "SELECT * FROM Employees WHERE Age < 30;"

すべての「ジム」:

q = "SELECT * FROM Employees WHERE Name = 'Jim';"

毎年何人の従業員が入社しましたか?

q = "SELECT COUNT(*) AS 'Total', Year FROM Employees GROUP BY Year;"
于 2013-05-27T05:07:33.213 に答える