我在将文本文件转换为JSON文件时遇到了问题。下面的示例中的文本文件如下所示:
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID: 4.000;LARA;OrangeKid-Regular我试过这个剧本:
import gspread
import os
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
import csv
import json
import pandas as pd
from pathlib import Path
#csv_file = pd.DataFrame(pd.read_csv("/users/krzysztofpaszta/CSVtoGD/build-a-bridge.csv", sep = ",", header = 0, index_col = False))
#csv_file.to_json("/users/krzysztofpaszta/CSVtoGD/build-a-bridge.json", orient = "records", date_format = "epoch", double_precision = 10, force_ascii = True, date_unit = "ms", default_handler = None)
#Odczyt pliku CSV
def read_CSV(file, json_file):
csv_rows = []
with open(file) as csvfile:
reader = csv.DictReader(csvfile)
field = reader.fieldnames
for row in reader:
csv_rows.extend([{field[i]:row[field[i]] for i in range(len(field))}])
convert_write_json(csv_rows, json_file) #definicja funkcji ponizej
#Zamiana CSV na JSON
def convert_write_json(data, json_file):
with open(json_file, "w") as f:
f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': ')))
f.write(json.dumps(data))
#pętla w folderze
pliki = "/users/user/CSVtoGD/"
files = Path(pliki).glob('*.csv')
for f in files:
read_CSV(f, str(f.with_suffix('.json'))) 但结果并不像预期的那样。数据混淆了,我不知道该如何修复。我在python和JSON文件方面非常新。有人能给我点提示吗?这是我剧本的结果:
[
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily: Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name: OrangeKid-Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name: OrangeKid-Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family: Orange Kid"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily: Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name: OrangeKid-Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID: 4.000;LARA;OrangeKid-Regular"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Description: To see more fonts by Ray Larabie"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Designer: Ray Larabie"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Designer URL: http://www.typodermic.com"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Manufacturer: Ray Larabie"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Vendor URL: http://www.larabiefonts.com"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Trademark: Orange Kid is a trademark of Ray Larabie."
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Copyright: (c) 1999-2009 Ray Larabie. See attached license agreement for more information. If EULA is missing"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:License URL: http://typodermicfonts.com/pages/license"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:License Description: http://typodermicfonts.com/pages/license"
},
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Vendor ID: TYPO"
}
][{"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily: Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name: OrangeKid-Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name: OrangeKid-Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family: Orange Kid"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily: Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name: OrangeKid-Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID: 4.000;LARA;OrangeKid-Regular"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Description: To see more fonts by Ray Larabie"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Designer: Ray Larabie"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Designer URL: http://www.typodermic.com"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Manufacturer: Ray Larabie"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Vendor URL: http://www.larabiefonts.com"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Trademark: Orange Kid is a trademark of Ray Larabie."}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Copyright: (c) 1999-2009 Ray Larabie. See attached license agreement for more information. If EULA is missing"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:License URL: http://typodermicfonts.com/pages/license"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:License Description: http://typodermicfonts.com/pages/license"}, {"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid": "Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Vendor ID: TYPO"}]发布于 2022-07-20 14:17:07
我不知道您希望得到什么结果,但是您可以将其作为普通文本文件读取,并在上一次:上使用rsplit(':', 1)进行拆分。
text = '''Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID: '''
import io
import json
data = {}
#with open(filename) as fh_in:
with io.StringIO(text) as fh_in:
for line in fh_in:
line = line.strip() # remove `\n` at the end and spaces
if line: # skip empty lines
name, value = line.rsplit(':', 1)
data[name] = value.strip()
data = [data]
print(json.dumps(data, indent=4)) 结果
[
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family": "Orange Kid",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily": "Regular",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name": "OrangeKid-Regular",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name": "OrangeKid-Regular",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family": "Orange Kid",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily": "Regular",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name": "OrangeKid-Regular",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version": "OTF 4.000;PS 001.001;Core 1.0.29",
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID": ""
}
]但是,如果这个文件中有更多的.ttf,并且希望将每个.ttf作为单独的目录,那么只需要更复杂的代码。
text = '''Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Full name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:PostScript name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred family: Orange Kid
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Preferred subfamily: Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Mac font menu name: OrangeKid-Regular
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29
Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf:Unique ID:
other.ttf:Family: Orange Kid
other.ttf:Subfamily: Regular
other.ttf:Full name: OrangeKid-Regular
other.ttf:PostScript name: OrangeKid-Regular
other.ttf:Preferred family: Orange Kid
other.ttf:Preferred subfamily: Regular
other.ttf:Mac font menu name: OrangeKid-Regular
other.ttf:Version: OTF 4.000;PS 001.001;Core 1.0.29
other.ttf:Unique ID: '''
import io
import json
data = {}
#with open(filename) as fh_in:
with io.StringIO(text) as fh_in:
for line in fh_in:
line = line.strip() # remove `\n` at the end and spaces
if line: # skip empty lines
ttf, field, value = line.split(':')
if ttf not in data:
data[ttf] = {}
data[ttf][field] = value.strip()
print(json.dumps(data, indent=4)) 结果:
{
"Assets/HighroadEngine/MMTools/Achievements/Fonts/orange kid.ttf": {
"Family": "Orange Kid",
"Subfamily": "Regular",
"Full name": "OrangeKid-Regular",
"PostScript name": "OrangeKid-Regular",
"Preferred family": "Orange Kid",
"Preferred subfamily": "Regular",
"Mac font menu name": "OrangeKid-Regular",
"Version": "OTF 4.000;PS 001.001;Core 1.0.29",
"Unique ID": ""
},
"other.ttf": {
"Family": "Orange Kid",
"Subfamily": "Regular",
"Full name": "OrangeKid-Regular",
"PostScript name": "OrangeKid-Regular",
"Preferred family": "Orange Kid",
"Preferred subfamily": "Regular",
"Mac font menu name": "OrangeKid-Regular",
"Version": "OTF 4.000;PS 001.001;Core 1.0.29",
"Unique ID": ""
}
}发布于 2022-07-20 12:26:01
数据看起来像一个固定的宽度格式,也就是说,没有唯一的列分隔符,但是每个列都有一定的宽度。csv不是正确的工具,但熊猫有一种read_fwf方法,它似乎做了正确的事情:
df = pd.read_fwf("path/to/your_file.txt", header=None)结果:
0 1 2
0 Assets/HighroadE... kid.ttf:Family: Orange Kid
1 Assets/HighroadE... kid.ttf:Subfamily: Regular
2 Assets/HighroadE... kid.ttf:Full name: OrangeKid-Regular
3 Assets/HighroadE... kid.ttf:PostScri... OrangeKid-Regular
4 Assets/HighroadE... kid.ttf:Preferre... Orange Kid
5 Assets/HighroadE... kid.ttf:Preferre... Regular
6 Assets/HighroadE... kid.ttf:Mac font... OrangeKid-Regular
7 Assets/HighroadE... kid.ttf:Version: OTF 4.000;PS 001...
8 Assets/HighroadE... kid.ttf:Unique ID: 4.000;LARA;Orang...现在,这只是通过带有适当设置的df.to_json() (尤其是p)来转换它的问题。( orient=...)但是由于您没有指定预期的格式,所以我将把它留给您来解决。
https://stackoverflow.com/questions/73051352
复制相似问题