Skip to content

Instantly share code, notes, and snippets.

@sodastsai
Created October 22, 2012 01:47
Show Gist options
  • Save sodastsai/3929220 to your computer and use it in GitHub Desktop.
Save sodastsai/3929220 to your computer and use it in GitHub Desktop.
Convert CSV to PLIST
#!/usr/bin/env python3
import sys
import csv
import plistlib
import os
csv_file = sys.argv[1]
with open(csv_file, 'r', encoding='utf-8') as f:
result = list(csv.DictReader(f))
plist_file = os.path.splitext(csv_file)[0] + '.plist'
plistlib.writePlist(result, plist_file)
#!/usr/bin/env python3
"""csv2plist
Convert CSV to PLIST file.
**Require Python 3
The first row of CSV works as the key rows
Each row in the csv file will convert into a dictionary with key rows.
For example:
CSV:
key1,key2,key3
val1,val2,val3
valA,valB,valC
PYTHON:
[
{
'key1': 'val1',
'key2': 'val2',
'key3': 'val3'
},
{
'key1': 'valA',
'key2': 'valB',
'key3': 'valC'
}
]
PLIST:
<array>
<dict>
<key>key1</key><string>val1</string>
<key>key2</key><string>val2</string>
<key>key3</key><string>val3</string>
</dict>
<dict>
<key>key1</key><string>valA</string>
<key>key2</key><string>valB</string>
<key>key3</key><string>valC</string>
</dict>
</array>
"""
import sys
import csv
import plistlib
import os
def main():
# Get csv file path from argument
try:
csv_file = sys.argv[1]
except IndexError:
print('Where\'s input file?')
return 1
# Read file in. Use utf-8 encoding with Python 3
try:
with open(csv_file, 'r', encoding='utf-8') as f:
# Check python documentation about csv.DictReader
csv_reader = csv.DictReader(f)
# Make reader become result list
result = list(csv_reader)
except IOError:
print('Invalid file path')
return 2
# Generate plist file path from csv file path
# Original: /Users/someone/example.csv
# Output: /Users/someone/example.plist
plist_file = os.path.splitext(csv_file)[0] + '.plist'
# Write
plistlib.writePlist(result, plist_file)
return 0
if __name__=="__main__":
sys.exit( main() )
@dr5hn
Copy link

dr5hn commented Oct 10, 2020

@sodastsai Thanks for the converter.

Small update to code required, due to this warning
DeprecationWarning: The writePlist function is deprecated, use dump() instead

#!/usr/bin/env python3
import sys
import csv
import plistlib
import os

csv_file = sys.argv[1]
with open(csv_file, 'r', encoding='utf-8') as f:
    result = list(csv.DictReader(f))

plist_file = os.path.splitext(csv_file)[0] + '.plist'
- plistlib.writePlist(result, plist_file)
+ plistlib.dump(result, plist_file)
#!/usr/bin/env python3

"""csv2plist
Convert CSV to PLIST file.
**Require Python 3
The first row of CSV works as the key rows
Each row in the csv file will convert into a dictionary with key rows.
For example:
CSV:
    key1,key2,key3
    val1,val2,val3
    valA,valB,valC
PYTHON:
    [
        {
            'key1': 'val1',
            'key2': 'val2',
            'key3': 'val3'
        },
        {
            'key1': 'valA',
            'key2': 'valB',
            'key3': 'valC'
        }
    ]
PLIST:
    <array>
        <dict>
            <key>key1</key><string>val1</string>
            <key>key2</key><string>val2</string>
            <key>key3</key><string>val3</string>
        </dict>
        <dict>
            <key>key1</key><string>valA</string>
            <key>key2</key><string>valB</string>
            <key>key3</key><string>valC</string>
        </dict>
    </array>
"""
import sys
import csv
import plistlib
import os

def main():
    # Get csv file path from argument
    try:
        csv_file = sys.argv[1]
    except IndexError:
        print('Where\'s input file?')
        return 1

    # Read file in. Use utf-8 encoding with Python 3
    try:
        with open(csv_file, 'r', encoding='utf-8') as f:
            # Check python documentation about csv.DictReader
            csv_reader = csv.DictReader(f)
            # Make reader become result list
            result = list(csv_reader)
    except IOError:
        print('Invalid file path')
        return 2

    # Generate plist file path from csv file path
    # Original: /Users/someone/example.csv
    # Output: /Users/someone/example.plist
    plist_file = os.path.splitext(csv_file)[0] + '.plist'
    # Write
-    plistlib.writePlist(result, plist_file)
+   plistlib.dump(result, plist_file)

    return 0

if __name__=="__main__":
    sys.exit( main() )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment