Как Вы сортировали каталог, перечисляющий датой создания в Python?

, лежащий в основе JSON String, является

"{ \"column_name1\":\"value1\",\"column_name2\":\"value2\",\"column_name3\":\"value3\",\"column_name5\":\"value5\"}";

Ниже приведен скрипт для фильтрации JSON и загрузки необходимых данных в Cassandra.

  sqlContext.read.json(rdd).select("column_name1 or fields name in Json", "column_name2","column_name2")
            .write.format("org.apache.spark.sql.cassandra")
            .options(Map("table" -> "Table_name", "keyspace" -> "Key_Space_name"))
            .mode(SaveMode.Append)
            .save()
109
задан Liza 11 February 2009 в 20:34
поделиться

7 ответов

Вот более подробная версия @Greg Hewgill ответ . Это - большая часть приспосабливания требованиям вопроса. Это делает различие между датами создания и модификации (по крайней мере, в Windows).

#!/usr/bin/env python
from stat import S_ISREG, ST_CTIME, ST_MODE
import os, sys, time

# path to the directory (relative or absolute)
dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.'

# get all entries in the directory w/ stats
entries = (os.path.join(dirpath, fn) for fn in os.listdir(dirpath))
entries = ((os.stat(path), path) for path in entries)

# leave only regular files, insert creation date
entries = ((stat[ST_CTIME], path)
           for stat, path in entries if S_ISREG(stat[ST_MODE]))
#NOTE: on Windows `ST_CTIME` is a creation date 
#  but on Unix it could be something else
#NOTE: use `ST_MTIME` to sort by a modification date

for cdate, path in sorted(entries):
    print time.ctime(cdate), os.path.basename(path)

Пример:

$ python stat_creation_date.py
Thu Feb 11 13:31:07 2009 stat_creation_date.py
54
ответ дан Community 5 November 2019 в 10:10
поделиться

Я сделал это в прошлом для сценария Python для определения последнее обновление файлы в каталоге:

import glob
import os

search_dir = "/mydir/"
# remove anything from the list that is not a file (directories, symlinks)
# thanks to J.F. Sebastion for pointing out that the requirement was a list 
# of files (presumably not including directories)  
files = filter(os.path.isfile, glob.glob(search_dir + "*"))
files.sort(key=lambda x: os.path.getmtime(x))

, Который должен сделать то, что Вы ищете на основе файла mtime.

РЕДАКТИРОВАНИЕ : Обратите внимание, что можно также использовать os.listdir () вместо glob.glob () при желании - причина, я использовал шарик в своем исходном коде, был то, что я желал использовать шарик, чтобы только искать файлы с определенным набором расширений файла, для которых лучше подходил шарик (). Для использования listdir, вот то, на что он был бы похож:

import os

search_dir = "/mydir/"
os.chdir(search_dir)
files = filter(os.path.isfile, os.listdir(search_dir))
files = [os.path.join(search_dir, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
131
ответ дан Yash 5 November 2019 в 10:10
поделиться

Вот моя версия:

def getfiles(dirpath):
    a = [s for s in os.listdir(dirpath)
         if os.path.isfile(os.path.join(dirpath, s))]
    a.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
    return a

Первый, мы создаем список имен файлов. isfile () используется для пропуска каталогов; это может быть опущено, если каталоги должны быть включены. Затем мы сортируем оперативный список, с помощью изменить даты в качестве ключа.

22
ответ дан efotinis 5 November 2019 в 10:10
поделиться

Вот острота:

import os
import time
from pprint import pprint

pprint([(x[0], time.ctime(x[1].st_ctime)) for x in sorted([(fn, os.stat(fn)) for fn in os.listdir(".")], key = lambda x: x[1].st_ctime)])

Это называет os.listdir () для получения списка имен файлов, затем называет os.stat () для каждого для получения времени создания, затем виды против времени создания.

Примечание, что этот метод только называет os.stat () однажды для каждого файла, который будет более эффективным, чем вызов его для каждого сравнения в виде.

20
ответ дан Greg Hewgill 5 November 2019 в 10:10
поделиться
sorted(filter(os.path.isfile, os.listdir('.')), 
    key=lambda p: os.stat(p).st_mtime)

Вы могли использовать os.walk('.').next()[-1] вместо того, чтобы фильтровать с os.path.isfile, но это оставляет мертвые символьные ссылки в списке, и os.stat перестанет работать на них.

4
ответ дан Alex Coventry 5 November 2019 в 10:10
поделиться

Возможно, необходимо использовать команды оболочки. В Unix/Linux найдите переданными по каналу с видом, вероятно, будет в состоянии сделать то, что Вы хотите.

-5
ответ дан stephanea 5 November 2019 в 10:10
поделиться
from pathlib import Path
import os

sorted(Path('./').iterdir(), key=lambda t: t.stat().st_mtime)

или

sorted(Path('./').iterdir(), key=os.path.getmtime)

или

sorted(os.scandir('./'), key=lambda t: t.stat().st_mtime)

, где m время является измененным временем.

0
ответ дан 24 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: