Всякий раз, когда вы хотите использовать переменные переменные, вероятно, лучше использовать словарь. Поэтому вместо записи
$foo = "bar"
$$foo = "baz"
вы пишете
mydict = {}
foo = "bar"
mydict[foo] = "baz"
Таким образом, вы не будете случайно перезаписывать ранее существовавшие переменные (что является аспектом безопасности), и вы можете иметь разные " Пространства имен».
result = []
for line in text.splitlines():
result.append(tuple(line.split(",")))
Далее приведен фрагмент кода, который использует модуль csv, но извлекает содержимое file.csv в список dicts, используя первую строку, которая является заголовком таблицы csv
import csv
def csv2dicts(filename):
with open(filename, 'rb') as f:
reader = csv.reader(f)
lines = list(reader)
if len(lines) < 2: return None
names = lines[0]
if len(names) < 1: return None
dicts = []
for values in lines[1:]:
if len(values) != len(names): return None
d = {}
for i,_ in enumerate(names):
d[names[i]] = values[i]
dicts.append(d)
return dicts
return None
if __name__ == '__main__':
your_list = csv2dicts('file.csv')
print your_list
Если вы уверены, что на вашем входе нет запятых, кроме как отделить категорию, вы можете прочитать строку строки по строке и split на ,
, затем нажмите результат на List
. Тем не менее, похоже, что вы смотрите на файл CSV, поэтому вы можете использовать модули для него
Как уже говорилось в командах, вы можете использовать библиотеку csv
в python. csv означает значения, разделенные запятыми, которые кажутся именно вашим случаем: метка и значение, разделенные запятой.
Будучи категорией и типом значения, я предпочитаю использовать тип словаря вместо списка кортежей.
В любом случае в приведенном ниже коде я показываю оба пути: d
- словарь, а l
- список кортежей.
import csv
file_name = "test.txt"
try:
csvfile = open(file_name, 'rt')
except:
print("File not found")
csvReader = csv.reader(csvfile, delimiter=",")
d = dict()
l = list()
for row in csvReader:
d[row[1]] = row[0]
l.append((row[0], row[1]))
print(d)
print(l)
Простой цикл будет достаточным:
lines = []
with open('test.txt', 'r') as f:
for line in f.readlines():
l,name = line.strip().split(',')
lines.append((l,name))
print lines
import csv
from pprint import pprint
with open('text.csv', newline='') as file:
reader = csv.reader(file)
l = list(map(tuple, reader))
pprint(l)
[('This is the first line', ' Line1'),
('This is the second line', ' Line2'),
('This is the third line', ' Line3')]
Если csvfile является файловым объектом, его следует открыть с помощью newline=''
. модуль csv
Используйте модуль csv
(Python 2.x):
import csv
with open('file.csv', 'rb') as f:
reader = csv.reader(f)
your_list = list(reader)
print your_list
# [['This is the first line', 'Line1'],
# ['This is the second line', 'Line2'],
# ['This is the third line', 'Line3']]
Если вам нужны кортежи:
import csv
with open('test.csv', 'rb') as f:
reader = csv.reader(f)
your_list = map(tuple, reader)
print your_list
# [('This is the first line', ' Line1'),
# ('This is the second line', ' Line2'),
# ('This is the third line', ' Line3')]
Python 3 .x (by @seokhoonlee ниже)
import csv
with open('file.csv', 'r') as f:
reader = csv.reader(f)
your_list = list(reader)
print(your_list)
# [['This is the first line', 'Line1'],
# ['This is the second line', 'Line2'],
# ['This is the third line', 'Line3']]
b
заставляет файл открываться в двоичном режиме, а не в текстовом режиме. В некоторых системах текстовый режим означает, что \n
будет конвертироваться в новую строку на платформе при чтении или записи. См. документы .
– Maciej Gol
24 May 2015 в 08:12
Pandas неплохо справляется с данными. Вот один пример, как использовать его:
import pandas as pd
# Read the CSV into a pandas data frame (df)
# With a df you can do many things
# most important: visualize data with Seaborn
df = pd.read_csv('filename.csv', delimiter=',')
# Or export it in many ways, e.g. a list of tuples
tuples = [tuple(x) for x in df.values]
# or export it as a list of dicts
dicts = df.to_dict().values()
Одно большое преимущество заключается в том, что pandas автоматически обрабатывает строки заголовков.
Если вы не слышали о Seaborn , я рекомендую посмотреть на него.
Несколько увеличивая ваши требования и предполагая, что вас не интересует порядок строк и вы хотите их сгруппировать по категориям, для вас может работать следующее решение:
>>> fname = "lines.txt"
>>> from collections import defaultdict
>>> dct = defaultdict(list)
>>> with open(fname) as f:
... for line in f:
... text, cat = line.rstrip("\n").split(",", 1)
... dct[cat].append(text)
...
>>> dct
defaultdict(<type 'list'>, {' CatA': ['This is the first line', 'This is the another line'], ' CatC': ['This is the third line'], ' CatB': ['This is the second line', 'This is the last line']})
Таким образом, вы получаете все соответствующие строки доступны в словаре под ключом, являющимся категорией.
Обновление для Python3:
import csv
with open('file.csv', 'r') as f:
reader = csv.reader(f)
your_list = list(reader)
print(your_list)
# [['This is the first line', 'Line1'],
# ['This is the second line', 'Line2'],
# ['This is the third line', 'Line3']]