Я использую Python (v 3.7.0) и мне нужно обработать более 17 770 текстовых файлов. Мне нужно иметь отдельную строку для каждого файла, а затем поместить данные файлов в пандус DataFrame ( Y ) в отдельные столбцы на основе данных. Для ускорения процесса я использую concurrent.futures.ThreadPoolExecutor()
, но похоже, что некоторые файлы не обрабатываются.
def lineProcess(file):
#This function takes a single file as input and processes it line by line
#It simultaneously adds the relevant data in the pandas DataFrame Y
with open(file) as f:
#a takes the first line of each file which will be the row of DataFrame Y
a = int(f.readline().split(':')[0])
for line in f.readlines():
#Now reading from 2nd line onwards
b = int(line.split(',')[0])
c= int(line.split(',')[1])
#Y is the DataFrame in which the data needs to be stored
Y.loc[str(a), str(b)] = c
def fileProcess():
#This function makes the call to function lineProcess() for each file
import glob2
fileslist = glob2.glob("*.txt")
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(lineProcess, fileslist)
if __name__ == '__main__':
#Main fnction to make the call to fileProcess function()
import pandas
global Y
Y = pandas.DataFrame()
fileProcess()
print(Y)
Теперь, чтобы протестировать программу, я запустил ее, используя только 5 текстовых файлов (fileslist[:] = fileslist[0:5]
). Предположим, что текстовые файлы: (textfile1.txt, textfile2.txt, textfile3.txt, textfile4.txt, textfile5.txt
) и первая строка каждого текстового файла (который соответствует одной строке кадра данных Y) будет иметь номера 1, 2, 3, 4, 5
i, e, данные 1-го файла будут в строка с rowname
1
, строка второго файла в строке с rowname
2
и так далее.
Теперь, после запуска вышеуказанной программы, вывод будет следующим: (я показываю два выхода, соответствующих выполнению кода два раза) :
2059652 1666394 1759415 ... 1687086 1188337 2100070
2 4.0 3.0 4.0 ... NaN NaN NaN
1 NaN NaN NaN ... NaN NaN NaN
3 NaN NaN NaN ... NaN NaN NaN
5 NaN NaN NaN ... 5.0 4.0 1.0
1065039 1544320 410199 732556 ... 2317644 1687086 1188337 2100070
1 NaN NaN NaN NaN ... NaN NaN NaN NaN
4 3.0 1.0 5.0 NaN ... NaN NaN NaN NaN
2 NaN NaN NaN NaN ... NaN NaN NaN NaN
5 NaN NaN NaN NaN ... 5.0 5.0 4.0 1.0
Порядок строк (2, 1, 3, 5
или 1, 4, 2, 5
) является случайным и меняется каждый раз, когда я запускаю над программой, но замечает , что код здесь пропущен при заполнении данных, соответствующих номеру файла. textfile4.txt
(строка с именем 4 отсутствует) в первом запуске и textfile3.txt
(строка с именем 3 отсутствует) во втором запуске.
Пример текстовых файлов, которые я обрабатываю, выглядит следующим образом (скажем, textfile1.txt
):
1:
1488844,3
822109,5
885013,4
30878,4
...(#so on)