簡體   English   中英

從文本文件中解析數據並將其存儲在數據庫中

[英]Parsing data from a text file and storing it in a database

首先感謝您提供的任何和所有幫助。

我們接收 TXT 格式的數據並且需要能夠將這些數據解析到某種形式的數據庫/存儲庫中的問題。

這個想法是每天在 _____ 和 ____ 小時之間創建一個包含數據的 .txt 文件。 例如文本格式的“Newdata20220629.txt”。

但是,這些數據極難閱讀,幾乎不可能以原始形式搜索。 txt 文件是原始文件,但 txt 文件的第一行包含每行數據的列,例如“名稱、日期、文件編號”等。

以下行是按這些類別順序排列的原始數據。 例如; 約翰·史密斯,2022 年 6 月 29 日,1234123

字段中沒有數據的任何列都有逗號,但不包含數據,例如;

約翰·史密斯,或 2022 年 6 月 29 日,

所以基本上我想做的是創建一個工具,它會持續運行以“Newdate(date).txt”格式查找文件,並根據我上面提到的內容解析該文本,然后將其存儲在用戶中-友好和可搜索的數據庫。 就個人而言,我認為 SQL 數據庫可能是最簡單的方法,但不知道我應該從哪里開始。

我建議結合使用SQLBulkCopy類(如此處所述: https ://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy?view=dotnet-plat-ext-6.0) CsvDataReader 類 ( https://joshclose.github.io/CsvHelper/examples/csvdatareader/ ) 如下所示。 您需要研究文件系統觀察者(如 Hursey 所說),以便在將新文件寫入您正在監視的文件夾時通知您的應用程序。

Protected Sub UploadCSV(filePath As String)
    ' Create CsvDataReader (IDataReader) to use with SqlBulkCopy
    Using csvData = New CsvDataReader(New FileStream(filePath , FileMode.Open)
        ' Reads first record as a header row.
        ' Name columns based on the values in the header row
        csvData.Settings.HasHeaders = True
        ' Set data types for parsing data
        csvData.Columns.Add("varchar") ' Column 1
        csvData.Columns.Add("varchar") ' Column 2
        csvData.Columns.Add("datetime") ' Column 3
        csvData.Columns.Add("decimal(18,2)") ' Column 4
        ' Create SqlBulkCopy object to import from the CsvDataReader
        Using bulkCopy = New SqlBulkCopy("Data Source=.;Initial Catalog=YourDatabase;User ID=Your Usernamesa;Password=YourPassword")
            ' Table to write to (must already exist).
            bulkCopy.DestinationTableName = "YourSQLTable"
            ' Map CSV column names to SQL columns names
            bulkCopy.ColumnMappings.Add("CSV_Column_Name_1", "SQL_Column_1") 
            bulkCopy.ColumnMappings.Add("CSV_Column_Name_2", "SQL_Column_2")
            bulkCopy.ColumnMappings.Add("CSV_Column_Name_3", "SQL_Column_3")
            bulkCopy.ColumnMappings.Add("CSV_Column_Name_4", "SQL_Column_4")
            ' Do the import
            bulkCopy.WriteToServer(csvData)
        End Using ' dispose SqlBulkCopy
    End Using ' dispose CsvDataReader
End Sub 

這應該需要一個 .txt 文件並寫入 .csv 然后將 .csv 寫入 SQL 數據庫/表,只需輸入您的服務器信息和文件的路徑。

導入這些以使用

import pandas as pd
import pyodbc

讀取 txt 文件並寫入 csv 文件

read_txt = pd.read_csv('Newdata20220629.txt', delimiter = ',')
write_csv = read_txt.to_csv('Newdata2022029.csv', index = None)

導入 CSV

data = pd.read_csv ('C:\Users\ExampleUser\Desktop\Test\Newdata2022029.csv')   
df = pd.DataFrame(data)

連接到 SQL Server

connection = pyodbc.connect('Driver={SQL Server};'
                      'Server=RON\SQLEXPRESS;'
                      'Database=test_database;'
                      'Trusted_Connection=yes;')
cursor = connection.cursor()

創建表

cursor.execute('''
        CREATE TABLE Table_Name (
            Name nvarchar(50),
            Date nvarchar(50),
            Product_ID Int
            )
               ''')

將 DataFrame 插入表

for row in df.itertuples():
    cursor.execute('''
                INSERT INTO Table_Name (Name, Date, Product_ID)
                VALUES (..., ..., ...)
                ''',
                row.Name, 
                row.Date,
                row.Product_ID
                )
connection.commit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM