Python не може читати файл файлу


11

Я намагаюся відкрити форм-файл із ноутбука Юпітера, але не можу його відкрити. Файл форми розміщений у тій самій папці, що і моя робоча книга, і Python не може його визначити, навіть якщо я використовую повний шлях.

import shapefile as shp
import matplotlib.pyplot as plt

sf = shp.Reader(r'C:\Users\Public\Documents\1-11-99n.shp')

ShapefileException: Unable to open C:\Users\Public\Documents\1-11-99n.dbf or C:\Users\Public\Documents\1-11-99n.shp.

Відкрити його за допомогою Фіона та геопанд теж не працює.

import fiona
shape = fiona.open("1-11-99n.shp")

і

import geopandas as gp
shp = gp.GeoDataFrame.from_file('1-11-99n.shp')
print (shp)

обидва закінчуються

CPLE_OpenFailedError: b'Unable to open 1-11-99n.shx or 1-11-99n.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it'

Я знаю, що це може бути тривіальною проблемою, але я новачок у використанні форм-файлів та просторових бібліотек Python, тому я дійсно не знаю, як вирішити цю проблему.


замінити мінус з підкресленням і спробуйте ще раз .. імена шейп повинні містити літери, цифри і символи підкреслення тільки . Було б також гарною ідеєю почати ім'я з літери. Якщо проблема не зникає, форма файлу, ймовірно, пошкоджена або відсутній .SHX .. у вас є лише файл .SHP або у вас повний набір файлів (.SHP, .SHX, .DBF, .PRJ тощо). )?
Майкл Стімсон

Можливо, ваш файл формату пошкоджений. Я зберігаю один довільний shapefile як 1-11-99n.shp, і у мене не виникло жодних проблем із будь-яким із ваших міні-сценаріїв з фігурними, фіонами або геопандами.
xunilk

3
Так, проблема полягала в тому, що я не включав інші файли shx, dbf тощо, які мені потрібні. Я ніколи раніше не використовував файли shp, тому не знав, що він потребує доповнення файлів. Ім'я файлу справно працювало, не змінюючи його. Дякую!
Леонард Шоу

1
@LeonardShaw Будь ласка, подумайте про надання відповіді на своє запитання, щоб ми могли вважати це питання вирішеним.
Аарон

Знову повторююсь, це порушення специфікації shapefile, щоб в імені файлу була провідна цифра чи дефіс. Найкраще використовувати, щоб не уникати імен, які можуть спричинити збої в деяких реалізаціях читання формфайлів.
Вінс

Відповіді:


21

Існує пастка для користувачів, які вперше формують файли. Фактичний файл форми (.shp) марний без супутніх файлів: .dbf, .shx, .prj тощо.

Це викладено в технічній специфікації shapefile, але це трохи вдосконалено, стаття Esri може бути більш підходящою для швидкого пояснення.

Важливо, щоб усі файли, що належать до файлу форми, розглядалися як єдине ціле. Якщо файл форми редагується на будь-якому етапі, навіть просто змінюються атрибути, змінюються FID (ідентифікатори функції), що означає порядок у файлі .DBF. Якщо ви редагуєте атрибути shapefiles та копіюєте лише файл .DBF, перезаписуючи існуючий файл .DBF, форми вказуватимуть на неправильні рядки. Завжди копіюйте ВСІ файли разом .

Коли ви надсилаєте файл форми електронною поштою, Dropbox, Google Drive тощо, я вважаю за доцільне зібрати всі файли в єдиний архів, щоб при розпакуванні всі пов’язані файли з’являлися разом.


1
Якщо точніше: .shp, .dbf і .shx - абсолютний мінімум (згідно стандарту). QGIS / OGR дозволить вам відкривати файли з відсутнім .dbf, але ви не зможете видалити або редагувати ці функції. Однак ви можете використовувати ogr2ogr для створення відсутнього dbf-файлу (з порожньою таблицею атрибутів)
LuWi

2
@LuWi навіть файл .SHX можна відновити, це просторовий індекс, є кілька інструментів та варіантів, які можуть відновити просторовий індекс із існуючих фігур. Точна кількість пов’язаних файлів варіюється, але завжди краще зберігати все разом.
Майкл Стімсон

0

Якщо єдиний у вас елемент - файл .shp, і ви можете обійтися без інших частин, розгляньте це рішення, відкриваючи та зберігаючи з OpenJump. https://gis.stackexchange.com/a/306228 Можливо, вам все-таки потрібен. , якщо для цього використовується однакова проекція.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.