Misalkan kode python dieksekusi dalam tidak diketahui oleh direktori windows sebelumnya katakan 'utama', dan di mana pun kode diinstal ketika dijalankan perlu mengakses ke direktori 'main / 2091 / data.txt'.
bagaimana saya harus menggunakan fungsi buka (lokasi)? apa yang seharusnya menjadi lokasi?
Edit:
Saya menemukan bahwa di bawah ini kode sederhana akan berfungsi .. apakah ada kekurangannya?
file="\2091\sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
python
file
path
relative-path
Bunga kamelia
sumber
sumber
r"\2091\sample.txt"
. Atau melarikan diri mereka seperti"\\2091\\sample.txt"
(tapi itu menjengkelkan). Juga, 2) Anda menggunakan getcwd () yang merupakan jalur yang Anda gunakan saat menjalankan skrip. Saya pikir Anda ingin relatif ke lokasi skrip (tapi sekarang bertanya-tanya). Dan 3), selalu gunakanos.path
fungsi untuk memanipulasi jalur. Jalur Anda bergabung dengan garis harusos.path.join(os.getcwd(), file)
4); tidak ada gunanyawith open(path, 'r+') as fp:
. Lihat di sini untuk penjelasan terbaik dariwith
pernyataan yang pernah saya lihat.os.path.abspath
untuk mendapatkan jalur penuh dari jalur relatif untuk membuka dengan mudah. Pernyataan terakhir terlihat seperti ini:os.path.abspath('./2091/sample.txt')
Jawaban:
Dengan hal semacam ini Anda harus berhati-hati dengan direktori kerja Anda yang sebenarnya. Misalnya, Anda tidak boleh menjalankan skrip dari direktori tempat file itu berada. Dalam hal ini, Anda tidak bisa hanya menggunakan jalur relatif dengan sendirinya.
Jika Anda yakin file yang Anda inginkan ada di subdirektori di bawah tempat skrip sebenarnya berada, Anda dapat menggunakan
__file__
untuk membantu Anda di sini.__file__
adalah jalur lengkap ke tempat skrip yang Anda jalankan berada.Jadi Anda bisa bermain-main dengan sesuatu seperti ini:
sumber
__file__
adalah jalur relatif (setidaknya pada pengaturan saya, untuk beberapa alasan), dan Anda harus meneleponos.path.abspath(__file__)
dulu. osx / homebrew 2.7NameError: name '__file__' is not defined
Kode ini berfungsi dengan baik:
sumber
Saya membuat akun hanya supaya saya bisa menjelaskan perbedaan yang saya rasa saya temukan di respons asli Russ.
Sebagai referensi, jawaban aslinya adalah:
Ini adalah jawaban yang bagus karena mencoba secara dinamis membuat jalur sistem absolut ke file yang diinginkan.
Cory Mawhorter memperhatikan bahwa itu
__file__
adalah jalur relatif (juga pada sistem saya) dan disarankan menggunakanos.path.abspath(__file__)
.os.path.abspath
, namun, mengembalikan jalur absolut dari skrip Anda saat ini (yaitu/path/to/dir/foobar.py
)Untuk menggunakan metode ini (dan bagaimana saya akhirnya bisa berfungsi) Anda harus menghapus nama skrip dari ujung jalan:
Abs_file_path yang dihasilkan (dalam contoh ini) menjadi:
/path/to/dir/2091/data.txt
sumber
os.path.dirname(os.path.abspath(__file__))
os.path.dirname
fungsi sendiri seperti yang saya lakukan dalam jawaban saya tahun lalu.Tergantung pada sistem operasi apa yang Anda gunakan. Jika Anda menginginkan solusi yang kompatibel dengan Windows dan * nix, sesuatu seperti:
harus bekerja dengan baik.
The
path
Modul mampu memformat jalan untuk sistem operasi apapun itu berjalan pada. Juga, python menangani jalur relatif dengan baik, asalkan Anda memiliki izin yang benar.Edit :
Seperti yang disebutkan oleh kindall dalam komentar, python dapat mengkonversi antara jalur unix-style dan windows-style, jadi kode yang lebih sederhana pun akan berfungsi:
Yang sedang berkata,
path
modul masih memiliki beberapa fungsi yang berguna.sumber
relpath()
mengonversi nama path ke jalur relatif. Karena ini sudah merupakan jalur relatif, itu tidak akan melakukan apa-apa.os.path
modul yang akan menjadi pilihan yang lebih baik?__file__
. Tolong lihat jawaban saya.Saya menghabiskan banyak waktu untuk menemukan mengapa kode saya tidak dapat menemukan file saya menjalankan Python 3 pada sistem Windows. Jadi saya menambahkan. sebelum / dan semuanya bekerja dengan baik:
sumber
file_path = os.path.join(script_dir, 'output03.txt')
script_dir = os.path.abspath(os.path.dirname(__file__))
Kode:
Penjelasan:
Impor perpustakaan:
Gunakan
__file__
untuk mencapai jalur skrip saat ini:Memisahkan jalur skrip menjadi beberapa item:
Hapus item terakhir dalam daftar (file skrip yang sebenarnya):
Tambahkan jalur file relatif:
Bergabunglah dengan item daftar, dan tambahkan file path relatif:
Sekarang Anda diatur untuk melakukan apa pun yang Anda inginkan dengan file tersebut, seperti, misalnya:
sumber
path = "/".join(script_directory) + "/" + rel_path
Anda harus menggunakan modul os seperti padapath = os.path.join(script_directory, rel_path)
. Alih-alih secara manual mem-parsing jalan yang harus Anda gunakanscript_path = os.path.dirname(__file__)
Coba ini:
Python 3.4 memperkenalkan perpustakaan standar baru untuk menangani file dan jalur yang disebut pathlib. Ini bekerja untuk saya!
sumber
Jika file ada di folder induk Anda, mis. follower.txt, Anda cukup menggunakan
open('../follower.txt', 'r').read()
sumber
Tidak yakin apakah ini berfungsi di mana-mana.
Saya menggunakan ipython di ubuntu.
Jika Anda ingin membaca file di sub-direktori folder saat ini:
skrip Anda ada di folder saat ini, coba saja ini:
sumber
Python hanya meneruskan nama file yang Anda berikan ke sistem operasi, yang membukanya. Jika sistem operasi Anda mendukung jalur relatif seperti
main/2091/data.txt
(petunjuk: ya), maka itu akan berfungsi dengan baik.Anda mungkin menemukan bahwa cara termudah untuk menjawab pertanyaan seperti ini adalah dengan mencobanya dan melihat apa yang terjadi.
sumber
getcwd()
. Saya membaca deskripsi asli sebagai "relatif terhadap tempat saya menjalankan skrip, di mana pun kode berada".sumber
Ketika saya masih pemula saya menemukan deskripsi ini agak menakutkan. Pada awalnya saya akan mencoba
For Windows
dan ini akan menaikkan
syntax error
. Saya menggunakan banyak bingung. Lalu setelah beberapa berselancar di google. ditemukan mengapa kesalahan terjadi. Menulis ini untuk pemulaItu karena untuk jalur yang akan dibaca di Unicode Anda cukup menambahkan
\
ketika memulai jalur fileDan sekarang berfungsi, tambahkan saja
\
sebelum memulai direktori.sumber
\t
seperti misalnya\top\directory
, daripada '\ t' ditafsirkan sebagai karakter tab dan 'trik' Anda gagal. Pilihan terbaik adalah menggunakan format string mentahr'C:\Users\chidu\Desktop\Skipper New\Special_Note.txt'
yang tidak mencoba untuk 'melarikan diri' karakter.