【问题标题】:Insert csv file into SQL Server database: error with listdir?将 csv 文件插入 SQL Server 数据库:listdir 出错?
【发布时间】:2015-09-20 06:41:44
【问题描述】:

我知道在这里抛出代码并寻求帮助解决问题是不好的。这个问题似乎有点超出我的想象。

代码应该循环遍历所有文件和子文件夹。我认为这里没有任何日志错误。问题是我遇到了再次处理相同文件并导致数据库插入在主键约束上失败的问题。

这是我的代码:

import csv
import pypyodbc
import os
import sys

extension = ".tsv"
connStr = """DSN=database_test;"""

sys.stdout = open('c:\\temp\\python.log', 'w')
print 'starting ...'

def LoadFile(path):   
    i = 0 
    for item in os.listdir(path): # loop through items in dir        
        full_path = os.path.join(path, item)
        if os.path.isfile(full_path) and full_path.endswith(extension): # check for ".tsv" extension

            if full_path.find('IM') > 0:
                table_name = 'table_a'
            else:
                table_name = 'table_b'

            if os.stat(full_path).st_size > 0:
                print "Processing file:", i, "|", full_path
                i = i + 1
                with open (full_path, 'r') as f:
                    reader = csv.reader(f, delimiter='\t')
                    columns = next(reader) 
                    query = 'insert into ' + table_name + '({0}) values ({1})'
                    crsr = cnxn.cursor()
                    for data in reader:
                        query = query.format(', '.join(columns), ', '.join('?' * len(columns)))          
                        #print(query, "with ", data)
                        if(data[1] != ''):
                            crsr.execute(query, data)
                    crsr.commit()  
                    crsr.close()                                
        elif os.path.isdir(full_path):                        
            print "Process Folder: ", full_path    
            LoadFile(full_path)                        
        else:
            print("invalid file name:", item)
    print "Process Folder total files: ", i, ":", full_path
    return         

cnxn = pypyodbc.connect(connStr)

dir_name = 'X:\\TopLevelFolder'
LoadFile(dir_name)

cnxn.close()
print("Completed")

【问题讨论】:

  • 日志没有按我的预期工作。但这不是表演的终结者。
  • 没人回应吗?我又做了一个测试。我在本地驱动器上创建了相同的文件夹结构,并复制了几个文件。我运行了相同的代码,它工作得很好。
  • 每个文件夹大约有 5000 个文件。这会给python列表带来问题吗?另一件事是 32 位与 64 位。我在 64 位机器上。

标签: sql-server csv pypyodbc


【解决方案1】:

我最初的问题有点误导......由于一些无法解释的硬件问题,代码无法正常工作。在我切换到 python 2.7 并重新安装所有库之后。代码工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多