Как импортировать каждую N-ю строку CSV-файла с помощью Python в скрипт

Я использую скрипт в fusion360 под названием importplinecsv. Мне было интересно, можно ли изменить скрипт так, чтобы он импортировал одну строку в каждую 10-ю строку? поскольку количество импортируемых строк очень велико и раздувается.

если бы я мог получить некоторую помощь, это было бы здорово.

вот текст

Автор - Autodesk Inc.

Описание-Импорт сплайна из файла csv

импорт adsk.core, adsk.fusion, traceback import io

def run (context): ui = None try: app = adsk.core.Application.get () ui = app.userInterface # Получить все компоненты в активном дизайне. product = app.activeProduct design = adsk.fusion.Design.cast (product) title = 'Импортировать сплайн csv', если не дизайн: ui.messageBox ('Нет активного дизайна Fusion', заголовок) return

    dlg = ui.createFileDialog()
    dlg.title = 'Open CSV File'
    dlg.filter = 'Comma Separated Values (*.csv);;All Files (*.*)'
    if dlg.showOpen() != adsk.core.DialogResults.DialogOK :
        return

    filename = dlg.filename
    with io.open(filename, 'r', encoding='utf-8-sig') as f:
        points = adsk.core.ObjectCollection.create()
        line = f.readline()
        data = []
        while line:
            pntStrArr = line.split(',')
            for pntStr in pntStrArr:
                try:
                    data.append(float(pntStr))
                except:
                    break

            if len(data) >= 3 :
                point = adsk.core.Point3D.create(data[0], data[1], data[2])
                points.add(point)
            line = f.readline()
            data.clear()            
    if points.count:
        root = design.rootComponent
        sketch = root.sketches.add(root.xYConstructionPlane)
        sketch.sketchCurves.sketchFittedSplines.add(points)
    else:
        ui.messageBox('No valid points', title)            

except:
    if ui:
        ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

person jmaskquestion    schedule 22.05.2020    source источник


Ответы (1)


Раньше я этой библиотекой не пользовался, но попробую:

for i, line in enumerate(f):
    if i%10==0:
        then your import command here

f - ваш файловый указатель. i будет номером ткани, а line - вашей строкой.

 dlg = ui.createFileDialog()
    dlg.title = 'Open CSV File'
    dlg.filter = 'Comma Separated Values (*.csv);;All Files (*.*)'
    if dlg.showOpen() != adsk.core.DialogResults.DialogOK :
        return

    filename = dlg.filename
    with io.open(filename, 'r', encoding='utf-8-sig') as f:
        points = adsk.core.ObjectCollection.create()
        for i, line in enumerate(f):
            if i%10==0:
                while line:
                    pntStrArr = line.split(',')
                    for pntStr in pntStrArr:
                        try:
                            data.append(float(pntStr))
                        except:
                            break

                    if len(data) >= 3 :
                        point = adsk.core.Point3D.create(data[0], data[1], data[2])
                        points.add(point)
                    line = f.readline()
                    data.clear()            
            if points.count:
                root = design.rootComponent
                sketch = root.sketches.add(root.xYConstructionPlane)
                sketch.sketchCurves.sketchFittedSplines.add(points)
            else:
                ui.messageBox('No valid points', title)            

except:
    if ui:
        ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
person anarchy    schedule 22.05.2020
comment
Привет, Анархия, спасибо за ответ! извините, что звучит действительно глупо, но где я должен ввести ваш добавленный текст. - person jmaskquestion; 22.05.2020
comment
хорошо, взгляните, но я действительно не уверен, как работает ваша библиотека, поэтому я особо не могу здесь сделать - person anarchy; 22.05.2020