from os.path import baspath, expanduser
filepath = abspath(expanduser("~/") + '/Downloads/DeletingDocs.txt')
print('Opening file', filepath)
with open(filepath, 'r') as fh:
print(fh.read())
OSX のファイル処理に注意してください。ファイルの種類によって IO が少し異なります。たとえば、.txt
Windows では「プレーン テキスト ファイル」と見なされるファイルは、OSX ではストレージ スペースを「賢く」しようとするため、実際には OSX では圧縮されたデータ ストリームです。
あなたがそれについて知らない限り、これは文字通りあなたの一日を台無しにする可能性があります(そこにいて、頭痛がした..先に進みました)
たとえば、OSX でファイルをダブルクリックすると、.txt
通常、テキスト エディターがポップアップし、それが行うことはos.open()
、OSX 中間層が実行できるようにする下位レベルでアクセスする代わりに、を呼び出すdisk-area|decompression pipe|file-handle -> Texteditor
ことですが、下位レベルでは、ファイルが保存されているディスク領域を開くことになり、データを印刷すると、期待するデータではないため、ゴミが発生します。
だから使ってみてください:
import os
fd = os.open( "foo.txt", os.O_RDONLY )
print(os.read(fd, 1024))
os.close( fd )
そして、フラグをいじります。open()
正直なところ、どちらがディスクからファイルをそのまま開くか(または)覚えていませんが、os.open()
そのうちの1つはデータをゴミのように見せ、時には解凍パイプへのポインタを取得するだけです(4バイトのデータが好きです)テキストファイルが巨大であっても)。
必要なファイルの更新を追跡/キャッチしている場合
from time import ctime
from os.path import getmtime, expanduser, abspath
from os import walk
for root, dirs, files in walk(expanduser('~/')):
for fname in files:
modtime = ctime(getmtime(abspath(root + '/' + fname)))
print('File',fname,'was last modified at',modtime)
そして、時間が前回のチェックと異なる場合は、それで何かクールなことをしてください. たとえば、Python で動作するこれらのライブラリがあります。
さらに多くの場合、最初の修正として外部アプリケーションを開く代わりに、Python 経由でそれらを開いて好みに合わせて変更し、最後の手段としてのみ (もしそうなら) Popen 経由で外部アプリケーションを開きます。
しかし、あなたがそれを要求したので(一種の... erm)、ここにPopen アプローチがあります:
from subprocess import Popen, PIPE, STDOUT
from os.path import abspath, expanduser
from time import sleep
run = Popen('open -t ' + abspath(expanduser('~/') + '/example.txt'), shell=True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
##== Here's an example where you could interact with the process:
##== run.stdin.write('Hey you!\n')
##== run.stdin.flush()
while run.poll() == None:
sleep(1)
自分の仕事を過剰に説明する:
これにより、変更されるたびにファイルの内容が出力されます。
with open('test.txt', 'r') as fh:
import time
while 1:
new_data = fh.read()
if len(new_data) > 0:
fh.seek(0)
print(fh.read())
time.sleep(5)
仕組み:
通常のファイル オープナーwith open() as fh
は、ファイルを開き、ハンドルとして に配置します。パラメーターを指定せずfh
に呼び出すと、ファイルの内容全体が取得されます。.read()
これは、ファイルを閉じるのではなく、単に「読み取り」ポインターをファイルの後ろに配置します (便宜上、位置 50 としましょう)。
これで、ポインターはファイルの最後の文字 50 にあります。ファイルに何かを書き込むたびに、より多くのデータが書き込まれるため、次.read()
は位置 50+ からデータを取得して.read()
空ではないため、発行して「読み取り」ポインターを位置 0 に戻し、.seek(0)
すべてを出力します。データ。
それを組み合わせて、os.path.getmtime()
逆の変更または 1:1 の比率の変更 (文字のスペルミスの置換など) を微調整します。