2017-03-13 20 views
0

それぞれに標準のテンプレートを持つ単一の.xmlファイルを作成したいときは、たびにいくつかの重要なデータが変わります。 これは私がすることができます、少し乱雑です。Python 3.xxで複数のファイルを作成する

私はこのスクリプトを実行し、ユーザーが定義した数のファイル1,10,50,100などを生成するフォルダー(既に設定済み)を持っていますが、各ファイルはfile_001.xml file_002です.xml file_003.xmlなどがあります。 今、私はそれをやり遂げることができるようになりましたが、新しいファイルが必要なたびにスクリプトを実行する必要があります。

私は何かが鮮明に見逃していると感じています。

ここにコードの外観があります。

import random 
import time 
import glob 
import os 
import csv 

# Importing random names & Sample types 
with open('names_m.csv', 'r')as f: 
    reader = csv.reader(f) 
    male = list(reader) 
with open('names_f.csv', 'r')as f: 
    reader = csv.reader(f) 
    female = list(reader) 
with open('surnames.csv', 'r')as f: 
    reader = csv.reader(f) 
    surname = list(reader) 
with open('sampletype.csv', 'r')as f: 
    reader = csv.reader(f) 
    stype = list(reader) 

# getting today's date to put into line 4,5,6 
date = time.strftime("%Y%m%d") 
# string_1 Unique reference number 
string_1 = random.randrange(1000000000, 9999999999) 
# string_2 patient ID number 
string_2 = 'P999990' 
# string_3 ward selection 
string_3 = random.choice(['W1', 'W2', 'F1', 'F2']) 
# string_4 date + order number (string_5) 
string_4 = date 
# string_5 sample order number. 
string_5 = random.randrange(00000000, 99999999) 
string_6 = random.choice(surname) 
string_7 = random.choice(male) 
string_9 = random.choice(['M', 'F']) 
# string_8 sample type. 
string_8 = random.choice(stype) 

# HL7 Message. 
line1 = "MSH|^~\&|RHM||||||201702141105||ORM^O01|%s|P|2.5||NE|AL|||| \n" % (string_1) 
line2 = "PID|1||%s^^^^HOSPITALNO~^^^^NHSNO||%s^%s||190701190000|%s|||||||||||||| \n" % (string_2, string_6, string_7, string_9) 
line3 = "PV1|1||%s|||||||||||||||||||||||||||||||||||||||||||||||| \n" % (string_3) 
line4 = "ORC|NW|%s%s||%s|||1^^^201702144500^^R||^^^20170214104500^^^^|||Test001||||REASON||||\n" % (string_4, string_5, string_5) 
line5 = "OBR|1|%s%s||%s|||2017021411045|201702141045||Test001||||||||||\n" % (string_4, string_5, string_8) 
line6 = "OBX|1|ST|%s%s||20170214%s|||||||||||||||\n" % (string_4, string_5, string_5) 
line7 = "SPM|1|||||||||||||||||||||||||||||\n" 
""" 
# How many new files we want creating. 
filecopy = input("How many files are to be created?:") 
files = filecopy 
""" 
filecopy = 100 

i = 1 
while os.path.exists("S360_%s.xml" % i): 
    i += 1 
if i == filecopy: 
    f.close() 
else: 
    f = open('S360_%s.xml' % i, "w") 
f.write(line1 + line2 + line3 + line4 + line5 + line6 + line7) 

誰かが解決策を持っていれば、私はすべての耳です。

はまた、ここで私はすでにボーナス質問として、

files = [1] = +1 

for files in files: 
    with open('S360_{}.xml'.format(files), "w") as f: 
     f.write(line1 + line2 + line3 + line4 + line5 + line6 + line7) 

os.chdir("C:\\UAT DATA") 
for file in glob.glob("*.xml"): 
    f = open((file.rsplit(".", 1)[0])+"xml", "w") 
    f.write(line1 + line2 + line3 + line4 + line5 + line6 + line7) 
    f.close() 

そして、もう一つの最終の事を試してみましたが、いくつかの解決策は、誰もが、私はからデータを印刷するときどのように光を当てることができ、あります私の.csvファイルは['Cooper'] ['Raymond']のように表示されます。おかげ

with open('names_m.csv', 'r')as f: 
for line in f: 
    line.strip() 
    male = list(f) 

を見て誰のために (私は:)このCSV部分に修正を発見しました)。

+0

関数内に1つのファイルを作成するコードをカプセル化します。この関数は、ファイル内で一定でないすべてのものを入力として受け入れる必要があります。次に、ループを作成するだけで、繰り返しごとにファイルを作成する関数が呼び出されます。 –

+0

@PatrickHaughあなたの返事をありがとう、無知で許してください。しかし、私はあなたが何を意味するか分かりません。あなたは私のコードブロック52&57の最初のブロックでf = open( "S360 _"(%s) "xml"%i "" w ")を試してみるべきですか? – Lloyd

答えて

0

最初の部分を呼び出して行を取得し、すべてをwhileループに入れる関数を作成する方法はありますか?

import random 
import time 
import glob 
import os 
import csv 

def get_lines(): 
    # Importing random names & Sample types 
    with open('names_m.csv', 'r')as f: 
     reader = csv.reader(f) 
     male = list(reader) 
    with open('names_f.csv', 'r')as f: 
     reader = csv.reader(f) 
     female = list(reader) 
    with open('surnames.csv', 'r')as f: 
     reader = csv.reader(f) 
     surname = list(reader) 
    with open('sampletype.csv', 'r')as f: 
     reader = csv.reader(f) 
     stype = list(reader) 

    # getting today's date to put into line 4,5,6 
    date = time.strftime("%Y%m%d") 
    # string_1 Unique reference number 
    string_1 = random.randrange(1000000000, 9999999999) 
    # string_2 patient ID number 
    string_2 = 'P999990' 
    # string_3 ward selection 
    string_3 = random.choice(['W1', 'W2', 'F1', 'F2']) 
    # string_4 date + order number (string_5) 
    string_4 = date 
    # string_5 sample order number. 
    string_5 = random.randrange(00000000, 99999999) 
    string_6 = random.choice(surname) 
    string_7 = random.choice(male) 
    string_9 = random.choice(['M', 'F']) 
    # string_8 sample type. 
    string_8 = random.choice(stype) 

    # HL7 Message. 
    line1 = "MSH|^~\&|RHM||||||201702141105||ORM^O01|%s|P|2.5||NE|AL|||| \n" % (string_1) 
    line2 = "PID|1||%s^^^^HOSPITALNO~^^^^NHSNO||%s^%s||190701190000|%s|||||||||||||| \n" % (string_2, string_6, string_7, string_9) 
    line3 = "PV1|1||%s|||||||||||||||||||||||||||||||||||||||||||||||| \n" % (string_3) 
    line4 = "ORC|NW|%s%s||%s|||1^^^201702144500^^R||^^^20170214104500^^^^|||Test001||||REASON||||\n" % (string_4, string_5, string_5) 
    line5 = "OBR|1|%s%s||%s|||2017021411045|201702141045||Test001||||||||||\n" % (string_4, string_5, string_8) 
    line6 = "OBX|1|ST|%s%s||20170214%s|||||||||||||||\n" % (string_4, string_5, string_5) 
    line7 = "SPM|1|||||||||||||||||||||||||||||\n" 

    return line1 + line2 + line3 + line4 + line5 + line6 + line7 

i = 1 
files = int(input("how many:")) 

while os.path.exists("S360_%s.xml" % i): 
    i += 1 
    if i == files: 
     print("complete") 
    else: 
     f = open('S360_%s.xml' % i, "w+") 
     lines_to_write = get_lines() 
     f.write(lines_to_write) 
     f.close() 
+0

これは素晴らしい考えです!残念ですが、ファイルがない場合は、1で始まるので、このコードを追加しました。 'i = 1 f = openx = int(input( "how many:")) files = x ファイルを編集するには、次のように入力します: files = x os.path.exists( "S360_%s.xml" %i)をしばらく: I + = 1 私はファイル==場合: プリント( "完全")他 : F =オープン( 'S360_%sのを.xml '%i、 "w +") lines_to_write = get_lines() f.write(lines_to_write) ' – Lloyd

+0

あなたがそれを解決したと聞いてよかった!私はあなたのコードの一部で自分の答えを更新したので、今は正しく動作するはずです。完了したら 'f.close()'でファイルを閉じるのを忘れないでください。あなたの質問に答えるなら、私の答えを受け入れてください。 – TasosGlrs

+0

ご協力いただきありがとうございます! :) – Lloyd

関連する問題