使用 Python 在 Blender Game Engine 中拆分 CSV 数据
Splitting CSV data in Blender Game Engine with Python
我正在 BGE 中进行一个小项目,并尝试将 data.txt 导入到 data.csv 文件,然后将数据拆分为 2 列。
我的 data.txt 看起来像这样;
Breathing rate:, 1.0
Pulse:, 140
Spinal Injury:, Yes
如您所料,我想要“,”作为列的分隔符。
这是我当前的代码;
try:
file = open(path+"dialogue.txt", 'r')
info = file.readlines()
own.text = str(info[currentLineNumber])
except:
own.text = "end of script"
column1 = []
column2 = []
if own ["currentLine"] == 10:
own.sendMessage("resume")
with open(path+"data.txt", 'r') as in_file:
stripped = (line.strip() for line in in_file)
datalines = (line.split(",") for line in stripped if line)
with open(path+"data.csv", 'w') as out_file:
writer = csv.writer(out_file)
writer.writerow(('subject', 'value'))
writer.writerow(('ID: ', (uuid.uuid1())))
writer.writerows(datalines)
os.rename(path+"data.csv", path+"newData.csv")
with open('newData.csv', 'r') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
column1.append(row[0])
column2.append(row[1])
我可以将数据导入 data.csv 但我不能将数据拆分成列,所有导入的数据都在一个列中。我该如何解决这个问题?
至少如果你的例子中的格式是一致的,你可以这样做:
datafile = "path/to/textfile"
with open (datafile, 'rt') as filehandle:
csv_reader = csv.reader(filehandle, delimiter = ',')
data = [row for row in csv_reader]
这会将逗号分隔的对收集到一个列表列表中,如下所示:
[['Breathing rate:', ' 1.0'], ['Pulse:', ' 140'], ['Spinal Injury:', ' Yes']]
如果您想要的数据是较大文件的子集,您可以将其复制到 stringIO 对象中,然后将其传递给 csv reader;它看起来像 reader 的磁盘文件。这是一个简单的例子:
import StringIO
filtered_data = StringIO.StringIO()
with open(datafile, 'rt') as originalfile:
for line in originalfile:
if ":," in line: # your real criteria would go here...
filtered_data.write(line.strip() + "\n")
# rewind to beginning of your stringIO
filtered_data.seek(0)
csv_reader = csv.reader(filtered_data, delimiter = ',')
data = [row for row in csv_reader]
我只是猜测实际上找到好的行的标准是什么——你可以使用你需要的任何逻辑来只选择逗号分隔的行
我正在 BGE 中进行一个小项目,并尝试将 data.txt 导入到 data.csv 文件,然后将数据拆分为 2 列。
我的 data.txt 看起来像这样;
Breathing rate:, 1.0
Pulse:, 140
Spinal Injury:, Yes
如您所料,我想要“,”作为列的分隔符。
这是我当前的代码;
try:
file = open(path+"dialogue.txt", 'r')
info = file.readlines()
own.text = str(info[currentLineNumber])
except:
own.text = "end of script"
column1 = []
column2 = []
if own ["currentLine"] == 10:
own.sendMessage("resume")
with open(path+"data.txt", 'r') as in_file:
stripped = (line.strip() for line in in_file)
datalines = (line.split(",") for line in stripped if line)
with open(path+"data.csv", 'w') as out_file:
writer = csv.writer(out_file)
writer.writerow(('subject', 'value'))
writer.writerow(('ID: ', (uuid.uuid1())))
writer.writerows(datalines)
os.rename(path+"data.csv", path+"newData.csv")
with open('newData.csv', 'r') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
column1.append(row[0])
column2.append(row[1])
我可以将数据导入 data.csv 但我不能将数据拆分成列,所有导入的数据都在一个列中。我该如何解决这个问题?
至少如果你的例子中的格式是一致的,你可以这样做:
datafile = "path/to/textfile"
with open (datafile, 'rt') as filehandle:
csv_reader = csv.reader(filehandle, delimiter = ',')
data = [row for row in csv_reader]
这会将逗号分隔的对收集到一个列表列表中,如下所示:
[['Breathing rate:', ' 1.0'], ['Pulse:', ' 140'], ['Spinal Injury:', ' Yes']]
如果您想要的数据是较大文件的子集,您可以将其复制到 stringIO 对象中,然后将其传递给 csv reader;它看起来像 reader 的磁盘文件。这是一个简单的例子:
import StringIO
filtered_data = StringIO.StringIO()
with open(datafile, 'rt') as originalfile:
for line in originalfile:
if ":," in line: # your real criteria would go here...
filtered_data.write(line.strip() + "\n")
# rewind to beginning of your stringIO
filtered_data.seek(0)
csv_reader = csv.reader(filtered_data, delimiter = ',')
data = [row for row in csv_reader]
我只是猜测实际上找到好的行的标准是什么——你可以使用你需要的任何逻辑来只选择逗号分隔的行