2

私は、父が持っている約 1000 個の古い AppleWorks ファイル (AppleWorks 形式の .cwk はサポートされていません) を .docx に変換するための最初のプログラムを Python で作成しました。明確にするために、プログラムは実際には何も変換しません。指定したドキュメント内のテキストをコピーして、必要なファイルタイプの別のドキュメントに貼り付けるだけです。

このプログラムは、私の Windows ラップトップでは正常に動作しますが、父の Mac ラップトップでは問題が発生します。

Windows のファイルパスは で示されますが\、Mac では/. そのため、プログラムが変数copypaste変数に到達すると、それぞれの文字列のスラッシュが間違った方向にあると、プログラムは機能しなくなります。

文字列を使用せずに、OS に応じてPython が myおよび変数にInputおよびOutputフォルダーを動的に追加する方法はありますか?copypaste

他に改善点がある場合は、遠慮なく言ってください。これをフリーウェアとしてリリースすることに興味があります。おそらく tKinter GUI を使用して、可能な限りユーザー フレンドリーにしたいと考えています。

現状では、プログラムにはいくつかの問題があります (アポストロフィをオメガ記号に変換するなど)。プログラムを試してみて、改善できるかどうかを確認してください。

import os, os.path
import csv
from os import listdir
import sys
import shutil

path, dirs, files = os.walk(os.getcwd() + '/Input').next()

file_count = len(files)
if file_count > 0:
  print "There are " + str(file_count) + " files you have chosen to convert."
else:
  print "Please put some files in the the folder labelled 'Input' to continue."
ext = raw_input("Please type the file extension you wish to convert to, making sure to     preceed your selection with '.' eg. '.doc'")

convert = raw_input("You have chosen to convert " + str(file_count) + " files to the "     + ext + " format. Hit 'Enter' to continue.")
if convert == "":
  print "Converter is now performing selected tasks."
  def main():
    dirList = os.listdir(path)
    for fname in dirList:
      print fname
      # opens files at the document_input directory.
      copy = open(os.getcwd() + "\Input\\" + fname, "r")
      # Make a file called test.docx and stick it in a variable called 'paste'
      paste = open(os.getcwd() + "\Output\\" + fname + ext, "w+")
      # Place the cursor at the beginning of 'copy'
      copy.seek(0)
      # Copy all the text from 'copy' to 'paste'
          shutil.copyfileobj(copy,paste)
          # Close both documents
          copy.close()
          paste.close() 
      if __name__=='__main__':
        main()
    else:
      print "Huh?"
      sys.exit(0)

わかりにくかったり、情報が抜けていたりしたら教えてください...

4

2 に答える 2

7

使用するos.path.join

たとえば、Inputサブディレクトリのパスを取得できます

path = os.path.join(os.getcwd(), 'Input')
于 2013-04-27T13:32:02.880 に答える
2

os.path.joinパスを結合するプラットフォームに依存しない方法です。

>>> os.path.join(os.getcwd(), 'Input', fname)
'C:\\Users\\Blender\\Downloads\\Input\\foo.txt'

Linux の場合:

>>> os.path.join(os.getcwd(), 'Input', fname)
'/home/blender/Downloads/Input/foo.txt'
于 2013-04-27T13:32:41.507 に答える