#python #csv
#python #csv
Вопрос:
У меня есть файл csv с 3 столбцами, третий столбец содержит тип данных, которым является строка (Training / Publict / PrivateTest), и чтобы получить эти данные, я запускаю, затем я использую оператор if, чтобы проверить, равно ли использование ключевому слову, а затем выполнить некоторые действия, чтобыэто строка, если ее. По какой-то причине он не обнаружит использование, и когда-либо строка помечена usage, а правописание / заглавные буквы правильные, не уверен, что делать?
РЕДАКТИРОВАТЬ Поскольку этот файл csv предназначен для модели машинного обучения, над которой я сейчас работаю, он огромен, и было бы намного проще, если бы я предоставил ссылку: https://www.kaggle.com/ashishbansal23/emotion-recognition . Что касается комментариев относительно печати «использования» и т. Д., Я сделал это, И результатом было только слово Training, Publict или PrivateTest.
for row in open(path):
idx = 0
real_idx = idx 1
with open(path, "r") as c:
emotion, image, usage = c.readlines()[real_idx].split(",")
if usage == "Trainingn":
train_labels.append(int(emotion))
imageArr = []
imageArr.append(image)
train_images.append(imageArr)
elif usage == "PublicTestn" or usage == "PrivateTestn":
test_labels.append(int(emotion))
imageArr = []
imageArr.append(image)
test_images.append(imageArr)
else:
print("This row was not assigned to any usage!")
idx = 1
def load_data():
return train_images, train_labels, test_images, test_labels
format_data(path)
load_data()```
Комментарии:
1. Покажите нам первые несколько строк входного файла.
2. В качестве основного шага отладки вы пробовали печатать
usage
?3. как предлагали другие. лучше всего показать несколько строк примеров данных (могут быть анонимизированы / изменены, если это позволяет воспроизвести проблему) и показать, что вы ожидаете получить и что вы получаете с вашим текущим кодом. Используйте минимальное количество строк if, которые позволяют показать проблему
4. еще одна общая рекомендация. Если вы не уверены на 100%, что ваш csv-файл никогда не будет содержать строк с символами «,» или » n» или другими причудами, лучше использовать
csv
модуль ( docs.python.org/3/library/csv.html ) вместо использования простого «,» разделить. Обычно также рекомендуется, чтобыwith open(..
формулировка была как можно короче. Два оператора if не требуют открытия файла, поэтому вы можете отменить их5. возможно, причина в том, что пробелы содержатся в строках, и, как
split(",")
бы сохранить такие пробелыusage
, имеют начальные или конечные пробелы. Итак, чтобы добавить к комментарию @John Gordon. Просто добавьте следующую строку для отладкиprint(repr(usage))
, которая покажет использование, но также четко укажет начальные или конечные пробелы.
Ответ №1:
Привет. Я бы прочитал файл CSV в строку [] следующим образом…
string[] lines = File.ReadAllLines(@csv); // read all CSV lines
int limit = lines.count; // no. of rows
определите количество столбцов на основе «,» в первой строке
System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex(",");
string fs = lines[0]; // First string in lines
n = rex.Matches(fs).Count; // how many "," in line
Затем получите количество строк и столбцов…
int rows = limit 1; // no. of rows
int cols = oc 1; // no. of cols
public static string[,] table; // The CSV table
table = new string[rows, cols]; // CSV table [rows,cols]
Затем разбейте каждую строку на отдельные значения и сохраните их в таблице, таким образом, вы сможете проверять каждый элемент независимо
string dummy = "";
string ts = "";
int p = 0;
for (int j = 0; j < rows; j )
{
ts = lines[r].Trim();
for (int k = 1; k < cols; k ) // break the line into its different parts
{
p = ts.IndexOf(","); // position of 1st comma
if (p == -1)
{
if (ts != "" amp; ts != null)
table[j, k] = ts.Trim().ToUpper();
else
table[j, k] = "X"; // insert an X if no data
continue;
}
dummy = ts.Substring(0, p);
table[j, k] = dummy.Trim.ToUpper();
}
}
Там у вас есть массив [n, m] с отдельными значениями, которыми вы можете управлять