Как сделать проверку для двух или более CSV-файлов в колбе Python - PullRequest
0 голосов
/ 29 декабря 2018

Пожалуйста, прежде чем не нравится этот вопрос, спросите меня, что вы не понимаете Здравствуйте, ребята, у меня есть программа для генерации данных, которая будет выполнять много вычислений, поэтому я не могу вставить всю свою программу сюда, так что я говорю только о моей программе Все вычисления программы начинаются с чтения файла, поэтому, когда я выбираю несколько CSV-файлов на веб-странице в опции «выбрать файл», мне нужно проверить номера столбцов (должны быть одинаковыми) для всех CSV-файлов и столбцовимя заголовка также должно соответствовать .. написанной мной программе:

from flask import Flask, render_template
import os
import csv
import pandas as pd
import numpy as np
app = Flask(__name__)

APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@app.route("/")
def index():
    print("Loading the root file")
    return render_template("upload.html")
@app.route("/upload", methods=['POST'])
def upload():
    target = os.path.join(APP_ROOT, 'input/')
        print("target-",target)

        if not os.path.isdir(target):
            os.mkdir(target)

    for file in request.files.getlist("source_fileName"):
            print("file-",file)
            filename = file.filename
            print("filename-",filename)

            destination = "/".join([target, filename])
            print("destination-",destination)
            file.save(destination)
            print("file>",file)
            global tempFile
            tempFile = destination
            print("tempFile - " + tempFile)
    return redirect("/compute", )
def compute():
    readerForRowCheck = pd.read_csv(tempFile)
        for row in readerForRowCheck:
            if (len(row) != 8):
                return render_template("Incomplete.html")

            headerColumn1 = row[0];
            headerColumn2 = row[1];
            headerColumn3 = row[2];
            headerColumn4 = row[3];
            headerColumn5 = row[4];
            headerColumn6 = row[5];
            headerColumn7 = row[6];
            headerColumn8 = row[7];

            if (headerColumn1 != "Asset_Id") or (headerColumn2 != "Asset Family") \
                or (headerColumn3 != "Asset Name") or (headerColumn4 != "Location")or (headerColumn5 != "Asset Component") \
                or (headerColumn6 != "Keywords") or (headerColumn7 != "Conditions") or (headerColumn8 != "Parts") :
                    return render_template("incomplete.html")
.....................................so on to then it will go to perform other task

HTML-программа:

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title> upload </title>
</head>
<body>
<div class="container">
    <h1>Large Data Generation</h1> 
<form id = "upload-form" action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">
        <div id="file-selector">
            <p> 
                <strong>Source File: </strong>
                <input id="source_fileName" type="file" name="source_fileName" accept="csv/*" multiple />
            </p> 
        </div>
    <input type="submit" value="Generate Data" id="upload-button"  >
</form>
</div>
</body>

Примечание: ** Я дал только строки кода, которые важны, в противном случае он содержит много кода ** Здесь я получаю, как я должен проверить файл CSV по номерам столбцов и имя должно быть таким же, я знаю, моя проверка для чтения файла CSVэто не правильно, почему я здесь, пожалуйста, помогите мне ..... спасибо

1 Ответ

0 голосов
/ 29 декабря 2018

I У вас есть несколько файлов, и вам необходимо создать экземпляр кадра данных для каждого файла. Функция загрузки будет выглядеть следующим образом:

def upload():
    target = os.path.join(APP_ROOT, 'input/')
        print("target-",target)
        if not os.path.isdir(target):
            os.mkdir(target)
    abs_path_files=[]
    for file in request.files.getlist("source_fileName"):
            print("file-",file)
            filename = file.filename
            print("filename-",filename)
            destination = "/".join([target, filename])
            print("destination-",destination)
            file.save(destination)
            print("file>",file)
            tempFile = os.path.abspath(destination)
            abs_path_files.append(tempfile)
            print("tempFile - " + tempFile)
    return redirect(url_for("compute", files_list=abs_path_files))

Функция вычисления будет выглядеть следующим образом:

def compute(files_list):
    dataFrames=[]
    for f in files_list:
        dataFrame=pd.read_csv(f)
        dataFrames.append(dataFrame)
    col_in_files = set([",".join(list(f.column.values)) for f in dataFrames])
    if len(col_in_files)==1:
       #then process your data here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...