複数のYAMLファイルをCSVに変換する

ココアシャネル12

私はPythonを初めて使用し、csvに変換する必要のあるYAMLファイルがいくつかあります。これらは、CRM(Highrise)から送信されたメモ、コメント、および電子メールです。メールではなく、メモとコメントのみが必要です。ここにいくつかの例があります。

Test_Co_1.txt

---
- ID: 273679215
  Name: Test Company 1
  Tags: 
  - Sample tag 1
  - Sample tag 2
  - Sample tag 3
  - Sample tag 4
- Contact: 
  - 
    - Addresses
    - 
      - "123 W Elm Street, Anywhere, FL, 11111, United States"
  - 
    - Phone_numbers
    - 
      - 555-111-2222
- Background: sample text
- Note 424169327: 
  - 
    Author: Diane S.
  - 
    Written: "May 16, 2017 19:32"
  - 
    About: Jeff Smith
  - 
    Body: Called 5/16/17 - Receptionist indicated Jeff was unavailable. She said they are not interested in attending any webinars hung up.
- Note 424598243: 
  - 
    Author: Jenny S.
  - 
    Written: "May 18, 2017 15:45"
  - 
    About: Test Company 1
  - 
    Body: |-
      email sent to TM: Pete

      Pete,

      Can you help us with this prospective customer to determine if he is interested?

      We made some outbound calls this week, inviting dealers to the prospective dealer Summer Series webinars, with the first one being this Friday.  Can you see if Jeff is interested?  We do not have an email for him.  Do you have that?

      This is the note from earlier this week:
      Called 5/16/17 - Receptionist indicated Jeff was unavailable. She said they are not interested in attending any webinars hung up.

      Thanks for your help.
      photo

      Jenny
- Comment 424601588: 
  - 
    Author: Jenny S.
  - 
    Written: "May 18, 2017 15:56"
  - 
    About: Test Company 1
  - 
    Body: |-
      email back from TM: Jenny,

      Yes.  I will reach out to them. 

      Thanks!
      Pete

別の例:Fake_Co_2

---
- ID: 306184746
  Name: Fake Company 2
  Tags: 
  - Sample Tag 1
- Contact: 
  - 
    - Addresses
    - 
      - "444 N Oak St, Faketon City, MI, 22222, United States"
  - 
    - Phone_numbers
    - 
      - 333-333-3333
- Note 473905168: 
  - 
    Author: Robin S.
  - 
    Written: "February 20, 2018 22:19"
  - 
    About: Fake Company 2
  - 
    Body: "1:1 with Steven 2/27/18"
- Email 476444812: 
  - 
    Author: Aaron N.
  - 
    Written: "March 06, 2018 16:30"
  - 
    About: Jose Viago
  - 
    Subject: Welcome Call
  - 
    Body: |-
      Hello Jose,



      We just talked and we scheduled your welcome call.  I noticed after we hung
      up that time changes this weekend.  Unfortunately Arizona
      doesn't change time and we will now be 2 hours behind you.  Are you
      available on at 10:30 AM CST on Tuesday, March 13th?  Otherwise I will need
      to schedule at a different time.  



      I apologize for the error and inconvenience. 




       <http://fakedomain.com/> 

      Support Team Lead 
      D: xxx-xxx-xxxx | C: xxx-xxx-xxxx | F: xxx-xxx-xxxx 
       <mailto:[email protected]> [email protected] 




       <http://fakedomain.com/> Website |
      <https://www.youtube.com/watch?v=xxx> Our Story


      Confidentiality Disclaimer: This email may contain confidential and/or
      private 
      information. If you received this email in error please delete and notify
      sender.
- Note 476458623: 
  - 
    Author: Jamie H.
  - 
    Written: "March 06, 2018 17:12"
  - 
    About: Fake Company 2
  - 
    Body: ""
- Note 476460268: 
  - 
    Author: Aaron N.
  - 
    Written: "March 06, 2018 17:18"
  - 
    About: Fake Company 2
  - 
    Body: |-
      Called and talked to Jose and scheduled the Welcome Call for Tuesday, March 13 at 9:30 AM.  After I hung up I realized that time changes this weekend.  I left him a voice mail and emailed to see if doing the appointment at 10:30 AM would be ok.  

      Prep for appointment: Monday, March 12 at 2:30 PM 
      Welcome Call: Tuesday, March 13 at 10:30 AM CST

      Jose emailed back and said that 10:30 is fine.  

      Michael H has been scheduled
- Comment 476460532: 
  - 
    Author: Aaron N.
  - 
    Written: "March 06, 2018 17:18"
  - 
    About: Jose Viago
  - 
    Body: |-
      From: Jose Viago [mailto:[email protected]] 
      Sent: Tuesday, March 6, 2018 10:01 AM
      To: [email protected]
      Subject: Re: Welcome Call

      Yes that is fine.  Thank you! 
      Jose Viago
      Fake Company 2
      xxx-xxx-xxxx
- Note 477585004: 
  - 
    Author: Laura H.
  - 
    Written: "March 12, 2018 23:46"
  - 
    About: Fake Company 2
  - 
    Body: |-
      Welcome call prep complete. Roadmap & workbook have been saved to their profile in BOX, and updated per their provided information. 
      03/12/18 (LH)
- Note 477740716: 
  - 
    Author: Michael H.
  - 
    Written: "March 13, 2018 16:47"
  - 
    About: Fake Company 2
  - 
    Body: |-
      03-13-2018. Did a welcome call with Jose. Jose now has access to the box. We will have a follow up call for Dashboard roll out.

      03-13-2018. Did a follow up with Jose. He now has owner and tech role to the App and Dashboard. We also reviewed Online portal and help center. (MH)
- Note 502997603: 
  - 
    Author: Laura H.
  - 
    Written: "August 06, 2018 17:14"
  - 
    About: Fake Company 2
  - 
    Body: |-
      Received a text from Jose letting me know there is a leak in his office, and he needs to reschedule our call today. I moved him to Thursday 08/09/18 @ 9:00AM CDT. 
      08/06/18 (LH)

これらのテキストファイルの一部は数千行の長さで、その特定の顧客(またはその顧客のために働く連絡先)のためにこれまでに記録されたすべての内部メモ、コメント、および電子メールが含まれています。

別のCRMに移行しているため、メモとコメントのみをインポートする必要があります。次のようなcsv(または必要に応じて複数のcsvファイル)を生成したいと思います。

output.csv

Name,Author,Written,About,Body
"Fake Company 2"|"Robin S."|"February 20, 2018 22:19"|"Fake Company 2"|"1:1 with Steve 2/27/18"
"Fake Company 2"|"Aaron N."|"March 06, 2018 17:18"|"Fake Company 2"|"Called and talked to Jose and scheduled the Welcome Call for Tuesday, March 13 at 9:30 AM.  After I hung up I realized that time changes this weekend.  I left him a voice mail and emailed to see if doing the appointment at 10:30 AM would be ok.  

      Prep for appointment: Monday, March 12 at 2:30 PM 
      Welcome Call: Tuesday, March 13 at 10:30 AM CST

      Jose emailed back and said that 10:30 is fine.  

      Michael H has been scheduled"

このコードには、yamlファイルのコンテンツから抽出してcsvファイルとして出力するスクリプトが必要であることがわかりましたが、構文エラーなしで動作させるにはPythonについて十分な知識がありません。

マーティン・エヴァンス

PythonYAMLライブラリを利用してそれを支援します。これは、次を使用してインストールできます。

pip install pyyaml

指定したファイルは、次のようにCSVに変換できます。

import csv
import yaml

fieldnames = ['Name', 'Author', 'Written', 'About', 'Body']

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=fieldnames)
    csv_output.writeheader()

    for filename in ['Test_Co_1.txt', 'Test_Co_2.txt']:
        with open(filename) as f_input:
            data = yaml.safe_load(f_input)

        name = data[0]['Name']

        for entry in data:
            key = next(iter(entry))

            if key.startswith('Note') or key.startswith('Comment'):
                row = {'Name' : name}

                for d in entry[key]:
                    for get in ['Author', 'Written', 'About', 'Body']:
                        try:
                            row[get] = d[get]
                        except KeyError as e:
                            pass

                csv_output.writerow(row)

これは、標準のCSV形式を想定しています(つまり、フィールドに改行またはコンマが含まれている場合は、フィールドと引用符の間にコンマが使用されます)。

これを理解するために、いくつかのprintステートメントを追加して、どのように見えるかを確認することをお勧めします。たとえばdata、ファイルの内容全体をリストと辞書の形式で保持します。次に、必要なビットを抽出する場合です。

これをすべてのYAMLファイルに適用するには、ファイル名を次の呼び出しに置き換えます。 glob.glob('*.txt')

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CSVファイルを複数行のJSONに変換する方法

分類Dev

複数のExcelファイルを1つに変換する

分類Dev

Makefile:複数の.dotファイルを.pngに変換する

分類Dev

Jupyterノートブックを使用して複数のシートを含むExcelファイルを複数のcsvファイルに変換する

分類Dev

SimpleXMLを使用して複数のXMLファイルを1つのCSVに変換する

分類Dev

パンダと地球儀を使用して複数の.xlsxファイルを.csvに変換する方法

分類Dev

複数のcsvファイルの名前を変更する

分類Dev

複数のcsvファイルの列を変更する

分類Dev

複数のcsvファイルをxlsxファイルに変換しますが、PowerShellを使用して異なるシートにします

分類Dev

CMDを使用して複数のPowerPointファイルをPDFに変換する

分類Dev

複数の.xlsファイルを.csvpythonに変換します

分類Dev

複数のCSVファイルでDateTime形式を変更する

分類Dev

複数のXMLファイルを変換する

分類Dev

複数のPowerShellスクリプトをExeファイルに変換する

分類Dev

複数の画像ファイルをJPEGからPDF形式に変換する

分類Dev

Pythonファイルを他の複数のファイルを含むexeに変換する方法は?

分類Dev

Pythonで複数のExcel「.xlsx」ファイルを「.csv」ファイルに変換しているときに余分な列が表示されますか?

分類Dev

Pythonを使用して複数のxmlファイルをcsvに変換

分類Dev

単一行のtsvファイルを複数行のtsvファイルに変換する

分類Dev

gmmagickを使用して複数のtiffファイルをpngファイルに変換する方法は?

分類Dev

パンダを使用して、複数のxlsmファイルを複数のcsvファイルに自動的に変換します

分類Dev

複数のフォルダ内のPDFファイルをフォルダ名と一致する複数のPDFファイルに変換する方法

分類Dev

大きなJavaScriptファイルを複数のファイルに変換する

分類Dev

CSVファイルのフォルダを同じように変換し、Pythonで複数のデータフレームを出力する

分類Dev

JSONファイルをgolangのcsvに変換する

分類Dev

CSVファイルの内容を辞書に変換する

分類Dev

複数の区切り文字を含むテキストファイルをCSVに変換します

分類Dev

複数行の変数をファイルbashに追加する

分類Dev

複数のファイルをcsvに印刷する

Related 関連記事

  1. 1

    CSVファイルを複数行のJSONに変換する方法

  2. 2

    複数のExcelファイルを1つに変換する

  3. 3

    Makefile:複数の.dotファイルを.pngに変換する

  4. 4

    Jupyterノートブックを使用して複数のシートを含むExcelファイルを複数のcsvファイルに変換する

  5. 5

    SimpleXMLを使用して複数のXMLファイルを1つのCSVに変換する

  6. 6

    パンダと地球儀を使用して複数の.xlsxファイルを.csvに変換する方法

  7. 7

    複数のcsvファイルの名前を変更する

  8. 8

    複数のcsvファイルの列を変更する

  9. 9

    複数のcsvファイルをxlsxファイルに変換しますが、PowerShellを使用して異なるシートにします

  10. 10

    CMDを使用して複数のPowerPointファイルをPDFに変換する

  11. 11

    複数の.xlsファイルを.csvpythonに変換します

  12. 12

    複数のCSVファイルでDateTime形式を変更する

  13. 13

    複数のXMLファイルを変換する

  14. 14

    複数のPowerShellスクリプトをExeファイルに変換する

  15. 15

    複数の画像ファイルをJPEGからPDF形式に変換する

  16. 16

    Pythonファイルを他の複数のファイルを含むexeに変換する方法は?

  17. 17

    Pythonで複数のExcel「.xlsx」ファイルを「.csv」ファイルに変換しているときに余分な列が表示されますか?

  18. 18

    Pythonを使用して複数のxmlファイルをcsvに変換

  19. 19

    単一行のtsvファイルを複数行のtsvファイルに変換する

  20. 20

    gmmagickを使用して複数のtiffファイルをpngファイルに変換する方法は?

  21. 21

    パンダを使用して、複数のxlsmファイルを複数のcsvファイルに自動的に変換します

  22. 22

    複数のフォルダ内のPDFファイルをフォルダ名と一致する複数のPDFファイルに変換する方法

  23. 23

    大きなJavaScriptファイルを複数のファイルに変換する

  24. 24

    CSVファイルのフォルダを同じように変換し、Pythonで複数のデータフレームを出力する

  25. 25

    JSONファイルをgolangのcsvに変換する

  26. 26

    CSVファイルの内容を辞書に変換する

  27. 27

    複数の区切り文字を含むテキストファイルをCSVに変換します

  28. 28

    複数行の変数をファイルbashに追加する

  29. 29

    複数のファイルをcsvに印刷する

ホットタグ

アーカイブ