2

次のような生年月日フィールドを含む.csvファイルがあります。

John,Smith,34 La La Lane,14/03/85,johnsmith@email.com
Sarah,Second,42 Wallaby Way,11/06/92,sarahsecond@email.com
Third,Example,99 Peacock Terrace,04/12/89,thirdexample@email.com

そして、特定の月(この場合、その月は最初のスラッシュの後、つまりdd / mm / yy)の間に生まれたエントリのファイルの行のみを出力するプログラムを作成したいと思います。

したがって、希望する月が3月の場合は、JohnSmithのエントリが印刷されます。

これに関するどんな助けも素晴らしいでしょう、私はしばらく苦労してきました

4

4 に答える 4

8

問題のどの部分に問題があるのか​​わからないので、一般的な回答をします。Python には、次のように使用できる csv リーダーがあります。

import csv
desiredMonth = 3
with open('people.csv', 'rb') as csvfile:
    content = csv.reader(csvfile, delimiter=',')
    for row in content:
        month = int(row[3].split('/')[1])
        if month == desiredMonth:
            # print the row or store it in a list for later printing

rowはすでにリストに分けられているのでrow[3]、誕生日になります。split()次に、月の部分を複数の部分に分割し[1]、2 番目の部分である月を提供します。変換することをintお勧めします。そのため、必要な月と簡単に比較できます。

于 2013-02-26T23:27:33.770 に答える
2

これは別のアプローチです...csvファイルを操作するために、pythonパッケージcsvkitは、.csvファイルを非常に簡単にスライスおよびダイスできる多数のコマンドラインユーティリティをインストールします。

$ pip install csvkit

csvgrepこれにより、 (とりわけ)と呼ばれるコマンドがインストールされます。

$ csvgrep -c 4 -r '\d{2}/03' yourfile.csv
First,Last,Address,Birthdate,Email
John,Smith,34 La La Lane,14/03/85,johnsmith@email.com

注意すべきことの 1 つは、csvkitすべての .csv ファイルにヘッダー行があることを前提としていることです。そのため、csvgrepショーの結果にヘッダー行が表示されます。これは、次のようにデータ ファイルにヘッダーを追加する必要があることも意味します。

First,Last,Address,Birthdate,Email
John,Smith,34 La La Lane,14/03/85,johnsmith@email.com
Sarah,Second,42 Wallaby Way,11/06/92,sarahsecond@email.com
Third,Example,99 Peacock Terrace,04/12/89,thirdexample@email.com 

コマンドライン引数の説明:

$ csvgrep -c 4 -r '\d{2}/03' yourfile.csv
-c specifies which column you want to search 
-r specifies the regular expression you want to match in the column

正規表現「^\d{2}/03」は、2 桁の数字、「/」、月「03」で始まる文字列に一致します。

詳細については、csvkit チュートリアルをご覧ください。

于 2013-02-27T00:17:14.033 に答える
1
import csv
with open('yourfile.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')
    for row in spamreader:
        date = row[3]
        month = date.split('/')[1]
        if int(month) >= YOUR_MONTH_HERE
            print row
于 2013-02-26T23:30:31.723 に答える
1

私が入れることができる限り多くのチュートリアルタイプ:-)

somecsvfile=r'/home/me/Desktop/txt.csv'
the_month_you_are_looking_for = 6 # as in june.
with open(somecsvfile, 'r') as fi:
    for line in fi:   
        list_from_text = line.split(',')
        bday = list_from_text[3]
        bmonth = int(bday.split('/')[1])
        if bmonth == the_month_you_are_looking_for:
            print (line)
于 2013-02-26T23:33:25.933 に答える