2016-12-18 2 views
0

У меня есть десять файлов CSV, созданных с использованием python. Каждый файл CSV имеет около 330K строк (строки), и каждая строка выглядит следующим образом:Слияние нескольких файлов csv по определенным критериям с использованием python

0.334,0.0232,0.00086,1.642e-05

[пустая строка]

0.334,0.0232,0.00086,1.742 е-05

[пустая строка]

...

(я не знаю, почему питон пишет в пустую строку после каждой строки).

Я пытаюсь объединить 10 файлов с именем Parameters1, Parameters2 .... Параметры 10, исключить пустую строку и написать, только если второй столбец содержит значение больше 0,1.

fout = open("C:\Anaconda3\Sr90NHPModelParameters\Parameters100.csv","a") 
for num in range(1,11): 
    for line in open("C:\Anaconda3\Sr90NHPModelParameters\Parameters"+str(num)+".csv"): 
     if line[0]!="": 
      if line[1]>0.1: 
       fout.write(line) 
      else: 
       pass 
     else: 
      pass 
fout.close() 

Если я запускаю приведенный выше код, я получаю неупорядоченные типы: str()> float().

и если я вместо того, чтобы выполнить тот же самый код, изменяя

if(line[1])>0.1 

в

if float(line[1])>0.1: 

я ValueError: не удалось преобразовать строку плавать: ''

Я не уверен, почему это так. Я должен '.' , но он является частью числа, например, 0,334 или 1,642e-05.

Большое спасибо за помощь!

+1

Второй * символ * линии - это период; вы не разбиваете его на поля. Если вы используете CSV, почему бы не использовать 'csv'? – jonrsharpe

+0

@jonrsharpe, я все еще в фазе обучения для python. Не могли бы вы пояснить, как я могу разделить поля, а не символы? Спасибо за вашу помощь. – DPdl

+0

Тогда google «Python CSV» и начните читать! Встроенный модуль, о котором я упоминал выше, стал бы разумной отправной точкой. – jonrsharpe

ответ

0

Пока вы не сможете реорганизовать код с помощью модуля csv, вы можете попробовать добавить line = line.strip().split(",") к вашему скрипту перед условиями, чтобы убедиться, что вы фактически работаете с list. Следующее должно стать достойной иллюстрацией:

with open("C:\Anaconda3\Sr90NHPModelParameters\Parameters100.csv","a") as fout: 
    for num in range(1,11): 
     for line in open("C:\Anaconda3\Sr90NHPModelParameters\Parameters"+str(num)+".csv"): 
      line = line.strip().split(",") 
      if line[0] == '' or float(line[1]) < 0.1: 
       continue 
      else: 
       fout.write(",".join(line)+"\n") 

Надеюсь, это поможет пока.

Смежные вопросы