Это мой CSV-файл:
CommitId RefactoringType RefactoringDetail
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8 Pull Up Attribute "Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8 Pull Up Attribute "Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8 Pull Up Attribute "Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Pla
Мне нужно извлечь это:
RefactoringDetail
"Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
"Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
"Pull Up Attribute protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
Я пробовал этот код:
import pandas as pd
df = pd.read_csv('result_refactorings.csv', sep='delimiter', header=None)
df.iloc[:,-1]
он возвращает все данные
Любая помощь, пожалуйста!
дубликат: stackoverflow.com/questions/19486369/…
Возможный дубликат Извлечь столбцы, специфичные для CSV-файла, для перечисления в Python
@Chris Я попробовал, и он возвращает ожидаемые, но не найденные столбцы: ['RefactoringDetail']
@HendaDrid Вы пробовали без header=None
?
@ да, и я попробовал другой код, но он не сработал
Pandas отлично подходит для работы с CSV-файлами, и следующий код будет всем, что вам нужно, чтобы прочитать CSV-файл и сохранить весь столбец в переменную:
import pandas as pd
df = pd.read_csv('test.csv', sep=';')
refactoring_details = df['RefactoringDetail']
print(refactoring_details)
Редактировать: разделитель в предоставленном файле ;
вместо ,
по умолчанию.
спасибо, но он возвращает эту ошибку: объект «DataFrame» не имеет атрибута «RefactoringDetail»
Не могли бы вы загрузить файл куда-нибудь и дать ссылку?
это ссылка: файлbin.net/w1elk0xp7b16v5b4 спасибо за помощь
О, так что вам не хватало, так это того, что ваш разделитель ;
вместо стандартного ,
. Я отредактировал свой ответ, и теперь он должен работать с вашим файлом.
Рад, что смог помочь :)
Если вы хотите просто использовать встроенный модуль csv:
import csv
import re
third_column = []
with open("result_refactorings.csv") as csvfile:
fixed_spaces = [re.sub(" {2,}","\t",x) for x in csvfile]
reader = csv.DictReader(fixed_spaces, delimiter = "\t")
for row in reader:
print(row["RefactoringDetail"])
third_column.append(row["RefactoringDetail"])
Этот код выводит третий столбец и добавляет каждый элемент в третий столбец в список third_column
.. уберите один или другой в зависимости от того, что вы хотите сделать.
Обновлено: При ближайшем рассмотрении кажется, что ваш ввод csv ограничен нечетным количеством пробелов... а не вкладками, как это выглядит... Добавлено небольшое регулярное выражение для замены 2 или более одновременных пробелов фактической вкладкой.. поскольку в текущем состоянии он не является допустимым csv.
спасибо, но он возвращает эту ошибку: KeyError: 'RefactoringDetail', и это общая ошибка для всех кодов, которые я пробовал
Вы пробовали это с Regex, в котором я редактировал? Это не сработало до того, как я сделал это для себя .. убедитесь, что программа чтения работает на fixed_spaces
.
В качестве альтернативы .. можете ли вы показать мне, как выглядит одна строка, если вместо этого вы просто делаете print(row)
?
он также возвращает ошибку: Ошибка: символ новой строки виден в поле без кавычек - вам нужно открыть файл в режиме универсальной новой строки?
Я вставил ваш пример прямо с этой страницы, и мне не нужно было этого делать. Должна быть какая-то проблема, которая не была перенесена. вы видите, что произойдет, если вы просто побежите print(open("result_refactorings.csv").readlines()[0])
?
он возвращает это: CommitId;RefactoringType;RefactoringDetail
Как насчет
pd.read_csv('result_refactorings.csv', sep='delimiter', usecols=['RefactoringDetail'])
?