Python: создание фрейма данных с именем файла и временем последнего изменения файла - PullRequest
0 голосов
/ 04 мая 2019

Я хочу прочитать имя файла в папке, которую я уже сделал, используя функцию file=glob.glob.... и добавьте в столбец 'file_last_mod_t' время последнего изменения файла.

моя часть кода:

df=pd.DataFrame(columns=['filename','file_last_mod_t','else'])

df.set_index('filename')
for file in glob.glob('folder_path'): #inside this folder is file.txt
    file_name=os.path.basename('folder_path')
    df.loc[file_name]= os.path.getmtime(file)

, что дает мне:

df:
filename,file_last_mod_t,else
file.txt,123456,123456          #123456 its time result example

Я хочу добавить это время последнего изменения только в столбец file_last_mod_t, но не для всех.

Я хочу получить:

df:
filename,file_last_mod_t,else
file.txt,123456,

спасибо за совет

после изменения кода:

df=pd.read_csv('C:/df.csv')
filename_list= pd.Series(result_from_other_definition)# it looks same as in #filename column
df['filename']=filename_list # so now i have dataframe with 3 columns and firs column have files list
df.set_index('filename')
      for file in glob.glob('folder_path'):#inside this folder is file.txt
      df['file_last_mod_t']=df['filename'].apply(lambda x: (os.path.getmtime(x)) #the way how getmtime is present is now no matter, could be #float numbers
      df.to_csv('C:/df.csv')

# образцы печати: первый запуск:

df['filename']=filename_list
print (df)
,'filename','file_last_mod_t','else'
0,file1.txt,NaN,NaN
1,file2.txt,NaN,NaN
Код

выше работает нормально после первого запуска, когда df пуст, только с заголовками. после следующего запуска, когда я запускаю код и df.csv имеет некоторое содержимое i am changing manually value of timestamp in file, я получаю сообщение об ошибке: TypeError: stat: path should be string, bytes, os.PathLike or integer,not float этот код должен заменить вручную измененную ячейку с хорошей временной меткой. я думаю, что это связано с apply Также я не знаю, почему индекс появляется в DF

** решено **

1 Ответ

1 голос
/ 04 мая 2019

Пожалуйста, смотрите комментарий к коду следующим образом:

import os
import pandas as pd
import datetime as dt
import glob

# this is the function to get file time as string
def getmtime(x):
    x= dt.datetime.fromtimestamp(os.path.getmtime(x)).strftime("%Y-%m-%d %H:%M:%d")
    return x

df=pd.DataFrame(columns=['filename','file_last_mod_t','else'])

df.set_index('filename')

# I set filename list to df['filename']
df['filename'] = pd.Series([file for file in glob.glob('*')])

# I applied a time modified file to df['file_last_mod_t'] by getmtime function
df['file_last_mod_t'] = df['filename'].apply(lambda x: getmtime(x))

print (df)

Результат:

          filename      file_last_mod_t else
0        dataframe  2019-05-04 18:43:04  NaN
1      fer2013.csv  2018-05-26 12:18:26  NaN
2         file.txt  2019-05-04 18:49:04  NaN
3        file2.txt  2019-05-04 18:51:04  NaN
4   Untitled.ipynb  2019-05-04 17:41:04  NaN
5  Untitled1.ipynb  2019-05-04 20:51:04  NaN

Для обновленного вопроса я начал с df.csv с такими данными:

filename,file_last_mod_t,else
file1.txt,,

И, я думаю, вы хотите добавить новые файлы.Итак, я сделал код следующим образом:

import os
import pandas as pd

df=pd.read_csv('df.csv')

df_adding=pd.DataFrame(columns=['filename','file_last_mod_t','else'])
df_adding['filename'] = pd.Series(['file2.txt'])
df = df.append(df_adding)
df = df.drop_duplicates('filename')

df['file_last_mod_t']=df['filename'].apply(lambda x: (os.path.getmtime(x))) #the way how getmtime is present is now no matter, could be #float numbers
df.to_csv('df.csv', index=False)

Я создал df_adding фрейм данных для новых файлов и добавил его в df, который читал df.csv.Наконец, мы можем применить getmtime и сохранить, если к df.csv.

...