2017-06-30 10 views
1

[OK]を、私はそこにファイルの束と私のデスクトップ上のフォルダがあります。私はそれを繰り返し、タイトルからINTEGER(年)を解析し、各ファイルの情報を開いて解析し、それをMySQLデータベースに入れたいと思っています。ディレクトリ内のファイルを反復処理し、INFOをMySQLデータベースにプラグインする方法

ファイルは次のようになり.txtファイルです:私は、MySQLデータベースに情報を解析する

Mary,F,7065 
Anna,F,2604 
Emma,F,2003 
Elizabeth,F,1939  ... and so on 

yob1880.txt 
yob1881.txt 
yob1882.txt ...and so on 

ファイル内の情報このように見えます。私は、テーブルの名前としてデータベースに解析されたINTEGER(年)を取得することはできません。ですから、私は自分のAUTO-INCREMENTED IDとしてデータベースにすべての年を入れてリンクする必要があると思います。しかし、私はどのように情報を対応する年にリンクしますか?このコードは、唯一の3つの列と10行で一つのテーブルを与える

import sqlite3 
import os 
import glob 

conn = sqlite3.connect('babynames.sqlite') 
cur = conn.cursor() 

cur.executescript(''' 
DROP TABLE IF EXISTS Babynames; 

CREATE TABLE Babynames (
    names TEXT UNIQUE, 
    gender TEXT, 
    ranking INTEGER 
    )''') 

folder = "folder/location" 
files = glob.glob(folder) # file names with content attached 

for f in files: 
    cut = f.split('/')[-1] 
    cut2 = cut.split('.')[0] 
    yob = cut2[3:] #parses out years from title 
    for i in files: 
     with open(i) as f: 
      content = f.read() 
      line = content.split(',') 
      names = line[0] 
      gender = line[1] 
      ranking = line[2] # need to get only integers 

      cur.execute('''INSERT OR IGNORE INTO Babynames (names, 
      gender, ranking) 
       VALUES (?, ?, ?)''', (names, gender, ranking)) 

conn.commit() 

数千行があるはずです:

は、ここに私のコードです。 :/

フォルダ内のすべてのファイルを繰り返し処理しているようには見えません。

答えて

0

あなたのコードで何をしようとしているのか本当に分かりません。次に、各ファイルを繰り返し処理し、各ファイルの内容を読み込み、各行を,で分割し、各行の3番目の要素を取得するコードを示します。

folder = "folder/location/" 
files = glob.glob(folder + '*.txt') // get all list of files 
for file in files : // iterate through files 
    with open(file, 'r') as myfile: // read each file 
     data=myfile.read().replace('\n', '') // store file content 
     for d in data: 
      yob = d.split(',')[2] 
      print yob 

注:私はこのコードをテストしていません。エラーが発生した場合は、私に知らせてください。

0

それとも、また使用することができパンダ:

import pandas as pd 

for file in files: 
    data = pd.read_csv(file, header=None) 
    cur.execute('''INSERT OR IGNORE INTO Babynames (names, 
      gender, ranking) 
       VALUES (?, ?, ?)''', (data[0].values, data[1].values, data[2].values)) 
関連する問題